mysql按组计数

Posted

技术标签:

【中文标题】mysql按组计数【英文标题】:mysql counts in a group by 【发布时间】:2009-09-17 13:35:35 【问题描述】:

假设我有一个投票表,用户可以在其中对值进行向上、向下或持平投票。 假设用户每次进行正确的投影时都会得到一个分数。

每周结束时我想显示一些统计数据。

类似:

SELECT user_id, sum( user_points ) as sum_points FROM voting_results
WHERE voting_date > ('2009-09-18' - INTERVAL 1 WEEK)
GROUP BY user_id 
ORDER BY sum_points DESC

很好。这将为我提供一个很好的列表,其中“最佳猜测”用户首先出现。

这是我的问题:

我如何 - 在同一个查询中 - 获取每个用户在给定时间段内投票的次数?

换一种说法:我想要一个计数 - 每行 - 需要包含在上述查询中使用 user_id 找到的行数。

有什么建议吗?

谢谢。

【问题讨论】:

“每个用户投了多少票”是指“投了票”还是“收到了票”? 好吧,我的意思是投票。答案很简单。我尝试将 count(*) 与 group by 甚至 count ( DISTINCT user_id ) 等一起使用。Quassnoi 得到了正确且简单的答案。再次感谢这个超级论坛。 【参考方案1】:

只需添加COUNT(*):

SELECT  user_id,
        SUM(user_points) as sum_points,
        COUNT(*) AS num_votes
FROM    voting_results
WHERE   voting_date > ('2009-09-18' - INTERVAL 1 WEEK)
GROUP BY
        user_id 
ORDER BY
        sum_points DESC

【讨论】:

以上是关于mysql按组计数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 找到最高计数后按组排序

按组将唯一/不同值的计数添加到原始数据

按组中的前 n(最少)项计数和分组

s-s-rS 条件表达式有助于按组区分计数

按组为 FALSE 和 NA 之间的 TRUE 运行创建计数器

MongoDB $reduce(aggregation) 组与数组中嵌套文档的总和并按组计数