具有计数、分组依据的MySQL查询
表:统计数字具有计数、分组依据的MySQL查询,mysql,group-by,Mysql,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 ---------------
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
使用组_concat
select user, count(0) as ct,group_concat(Message) from statistics group by user;
Group_concat(Message SEPARATOR '----')
这将为您提供csv格式的消息
注意:在mysql中,GROUP_CONCAT的默认大小限制为1024个字符
对于UTF,它转到1024/3和utfmb4 2551024/4
您可以使用group_concat_max_len全局变量根据需要设置其最大长度,但要考虑生产环境中的内存因素
SET group_concat_max_len=100000000
更新:
您可以使用组_concat中的任何分隔符
select user, count(0) as ct,group_concat(Message) from statistics group by user;
Group_concat(Message SEPARATOR '----')
您可以使用完整的表格加入您的组的结果,或者反之亦然
或者,根据需要,您可以使用组\u concat,使用\n作为分隔符。尝试使用自连接进行分组:
select user, count(*) as 'total' , group_concat(message) from statistics group by user;
select s1.user, s2.cnt, s1.message
from statistics s1
join (
select user, count(*) cnt
from statistics
group by user
) s2 on s1.user = s2.user
您似乎希望按用户显示Count,即用户发送的消息
如果您的mysql版本不支持窗口功能,您可以在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:
:
消息列的大小是多少?消息varchar100示例数据和预期结果是否正确?因为message3是针对user1的。您的mysql版本是什么?@D-Shih mysql版本是5.6,是的示例数据是正确的。这是用户发送的消息。user1已发送了两条消息:message1和message3。是否可以在下一行而不是csv中获取输出,因为message列已经有逗号,并且很难用group_concat的逗号进行解析。如果用户不需要,您能否解释在这种情况下join将如何工作repeated@Shubham例如,见D-Shih的新答案。