我有一张表格
Ship_type | userid | Message
这些列都不是唯一的。
我想计算每种船型有多少个(唯一)用户ID,从而找出哪种船型最受欢迎。
例:
Ship_type | userid| Message
-------------- ------- ----------
Sailboat | 34241 | hello
Sailboat | 34241 | hi
Sailboat | 34241 | I'm on a boat!
Fishingvessel | 31245 | yo
Fishingvessel | 98435 | hi there
在这里,我们看到有两个不同的渔船和一个帆船。
如果我执行以下查询:
select ship_type, count(ship_type) FROM db1.MessageType5 GROUP BY ship_type ORDER BY count(ship_type) ASC;
我懂了
Sailboat | 3
Fishingvessel | 2
这是错误的-因为它计算属于每个ship_type的消息数。
所需结果:
Fishingvessel | 2
Sailboat | 1
最佳答案
您必须COUNT
DISTINCT
用户ID(如果需要提供的结果,则必须ORDER BY
... DESC
):
SELECT ship_type, COUNT(DISTINCT userid) as cnt
FROM db1.MessageType5
GROUP BY ship_type
ORDER BY cnt DESC
请参见this fiddle。
关于sql - 按同一表中的两个值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27131597/