sql - 按同一表中的两个值分组

标签 sql sqlite

我有一张表格

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/

相关文章:

sql - 如何更改 PostgreSQL 数据库表中列的位置?

asp.net - LINQ to SQL、ExecuteQuery 等

php - 使用 select mysql 删除

android - 我应该将图像存储在 SQLite 数据库中吗?

python - flask-sqlalchemy 表编辑未显示

android - Sqlite db重新排列行

sql - Oracle 包含提供无效的标识符 ORA-00904

mysql - 无法通过 Travis CI 上的套接字连接到本地 MySQL 服务器

c - 在 C (Eclipse) 中获得 sqlite3 功能

java - 每次运行应用程序时都会创建一个新数据库吗?