MySQL Query with count, group by

桑托什

表:统计

id | user  | Message
----------------------
1  | user1  |message1 
2  | user2  |message2
3  | user1  |message3

我能够使用此查询找到每个用户发送的消息数

select user, count(*) from statistics group by user;

如何显示消息列数据和计数?例如

user | count | message
------------------------
user1| 2     |message1
             |message3
user2| 1     |message2    

你似乎想显示Countusermessage发送的user

如果你的mysql版本不支持窗口函数,你可以row_number在select子查询中做子查询,然后只显示rn=1用户和计数

CREATE TABLE T(
   id INT,
    user VARCHAR(50),
  Message VARCHAR(100)
);


INSERT INTO T VALUES(1,'user1'  ,'message1'); 
INSERT INTO T VALUES(2,'user2'  ,'message2');
INSERT INTO T VALUES(3,'user1'  ,'message3');

查询 1

SELECT (case when rn = 1 then user else '' end) 'users',
       (case when rn = 1 then cnt else '' end) 'count',
       message
FROM (
  select 
      t1.user, 
      t2.cnt, 
      t1.message,
      (SELECT COUNT(*) from t tt WHERE tt.user = t1.user and t1.id >= tt.id) rn
  from T t1
  join (
    select user, count(*) cnt
    from T
    group by user
  ) t2 on t1.user = t2.user
) t1
order by user,message

结果

| users | count |  message |
|-------|-------|----------|
| user1 |     2 | message1 |
|       |       | message3 |
| user2 |     1 | message2 |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章