MYSQL忽略重复值并获取唯一计数

时间:2014-08-27 21:15:03

标签: mysql count group-by unique

基本上,正如问题所述,我正在寻找基于唯一值获取计数的最简单,最直接的方法。

这是我的数据集:

id   |    item_id   |   user_id
1    |    10        |   123
2    |    10        |   123
3    |    10        |   123
4    |    11        |   123
5    |    12        |   123
6    |    10        |   456
7    |    10        |   789
8    |    12        |   456

理想情况下,当我运行查询时,我应该得到以下内容:

count    |    user_id
3        |    123
2        |    456
1        |    789

尽管用户123的名字中有5个项目,但实际上只购买了3个独特的项目。这真的很直接,我只是完全错过了吗?这是我目前的情况:

SELECT count(user_id) AS count, item_id, user_id
FROM table
GROUP BY item_id, user_id
HAVING count > 1
ORDER BY count DESC

这与我想要的相反:

count    |    user_id
5        |    123
2        |    456
1        |    789

提前致谢!如果已经回答了这个问题,请指出我的方向。

1 个答案:

答案 0 :(得分:1)

您可以计算不同的项ID,然后按用户ID进行分组:

SELECT 
  COUNT(DISTINCT item_id) AS count, 
  user_id
FROM 
  event_assigned
GROUP BY 
  user_id
ORDER BY 
  count DESC