按MySQL中的唯一列分组

时间:2015-08-01 16:17:40

标签: mysql sql

我有一个简单的表格posts,如

user_id
created

现在,我想总结每月的帖子数量,我使用查询

SELECT DATE_FORMAT(`created`,'%Y-%m') AS d,
       count(*) AS total
FROM posts
GROUP BY d
ORDER BY d;

但是,如果我想知道唯一身份用户的数量,那也没关系。帖子每月(即user_id),怎么做?

2 个答案:

答案 0 :(得分:0)

您必须按user_id分组:

SELECT 
  DATE_FORMAT(`created`,'%Y-%m') AS d,
  user_id AS u,
  count(*) AS total
FROM posts
GROUP BY DATE_FORMAT(`created`,'%Y-%m'), user_id
ORDER BY d;

这将为您提供给定日期的每个用户的帖子。我想其他答案对你需要的更为正确。

此外,我不确定您是否可以GROUP BY别名d。在SQL Server中,这是一个错误。我对MySql不太熟悉。

答案 1 :(得分:0)

如果通过“每月唯一身份用户的帖子数”,则表示您希望每个月都知道至少有一个帖子的不同用户数(不同的user_id):

SELECT 
    DATE_FORMAT(`created`,'%Y-%m') AS d,
    COUNT(DISTINCT user_id) AS total
FROM posts
GROUP BY d
ORDER BY d;

如果你的意思是每个月,至少有一个帖子的不同用户列表,然后计算这个数字:

SELECT 
    user_id,
    DATE_FORMAT(`created`,'%Y-%m') AS d,
    COUNT(*) AS total
FROM posts
GROUP BY d, user_id
ORDER BY d, user_id;