首页 > 解决方案 > 计算 SQL 中特定值的重复次数

问题描述

我有这张桌子:

ID | mssg
--------
 A | 1
 B | 1
 C | 1
 A | 3
 B | 2
 C | 2
 D | 5
...|...

我想计算每种类型有多少不同的消息,并将它们分组为每个相关的 ID。

我目前有一个工作脚本,可以成功计算每个 ID 的重复消息总数:

SELECT DISTINCT ID, COUNT(ID) AS mssg_count
FROM my_table
GROUP BY ID
ORDER BY ID

但我想修改它以计算 mssg = '1' 或 mssg = '2' 时的特定消息。

我尝试过这样的事情:

SELECT DISTINCT ID, (SELECT COUNT(mssg)
   WHERE mssg = '1'
   HAVING COUNT(mssg) > 1)
GROUP BY ID
FROM my_table

但是我对 SQL 缺乏经验并且遇到语法错误。

我的预期表看起来像这样:

ID | Total number of messages | Amnt of messages where mssg = 1 | mssg = 2..
------------------------------------------------------------------------------
 A |            2             |                 1               |      0
 B |            2             |                 1               |      1
 C |            2             |                 1               |      1
 D |            1             |                 0               |      0
...|..........................|.................................|............

标签: sqlsql-server-2014

解决方案


对于您的个人专栏。您可以使用:

sum(CASE WHEN mssg = '1' THEN 1 ELSE 0 END)

完整的 SQL:

SELECT
    ID,
    sum(CASE WHEN mssg = '1' THEN 1 ELSE 0 END)
FROM my_table
GROUP BY ID


推荐阅读