MySQL Query Grouped Conditional Count

时间:2016-02-05 05:06:35

标签: mysql count group-by

这是mySQL表数据:

╔════╦══════╦══════════╦══════════════╗
║ ID ║ USER ║   DATE   ║ NUMDOWNLOADS ║
╠════╬══════╬══════════╬══════════════╣
║  1 ║ John ║ xx-xx-xx ║      1       ║
║  2 ║ Mary ║ xx-xx-xx ║      3       ║
║  3 ║ John ║ xx-xx-xx ║      5       ║
║  4 ║ Mary ║ xx-xx-xx ║      2       ║
║  5 ║ Mary ║ xx-xx-xx ║      6       ║
║  6 ║ John ║ xx-xx-xx ║      7       ║
║  7 ║ John ║ xx-xx-xx ║      1       ║
║  8 ║ Mary ║ xx-xx-xx ║      8       ║
║  9 ║ Mary ║ xx-xx-xx ║      9       ║
╚════╩══════╩══════════╩══════════════╝

我想要实现的是按USER对数据进行分组,并显示每个USER的NUMDOWNLOADS总数,其中NUMDOWNLOADS为> X.例如,如果X = 5:

John:1(自1个NUMDOWNLOADS> 5,其他人统称为1) 玛丽:3(自3个下载> 5,其他人统称为1)

那么,(1)每个用户的输出,以及(2)输出总数,在这种情况下将是4.清楚如泥:)使用声明的想法?

3 个答案:

答案 0 :(得分:1)

SELECT USER, COUNT(NUMDOWNLOADS)
FROM downloads
WHERE NUMDOWNLOADS > 5
GROUP BY USER

请按照以下链接查看正在运行的演示:

SQLFiddle

答案 1 :(得分:1)

我想你只想计算NUMDOWNLOADS > 5

的记录
select USER, count(*)
from myTable
where NUMDOWNLOADS > 5
group by USER

在任何分组完成之前执行<{1}}过滤器,因此首先此查询会过滤掉与WHERE不匹配的所有行,然后它由USER分组并计数。

或者,如果您的实际查询中有某些内容要求您使用条件总和,那么您也可以这样做:

NUMDOWNLOADS > 5

答案 2 :(得分:1)

您的查询就在这里。试试吧

SELECT USER, COUNT(NUMDOWNLOADS)
FROM table_name
WHERE NUMDOWNLOADS > 5
GROUP BY USER