我正在尝试计算字段 D 中不同值的数量,按字段 A、B 和 C 分组。如果计数返回 1,我想知道 D 的值是多少。
例如:
SELECT A, B, C, COUNT(D) AS D_COUNT
FROM EXAMPLE_TABLE
GROUP BY A, B, C
HAVING COUNT(D) = 1
自从我完成 SQL 以来已经有一段时间了,我一直在研究这个问题,我相信我可能忽略了一些非常简单和明显的东西。例如,我尝试过多次连接到同一个表,但我一直遇到“D”不包含在聚合或分组中的问题。 有任何想法吗?
最佳答案
由于在每一组中 D
都有一个非 NULL
值,因此您可以只使用 MAX
或 MIN
以查看该值是什么。
SELECT A,
B,
C,
COUNT(D) AS D_COUNT,
MAX(D) AS D
FROM EXAMPLE_TABLE
GROUP BY A,
B,
C
HAVING COUNT(D) = 1
对这个适用于 COUNT(D) = @N
的问题的更一般的回答是使用窗口聚合。例如
;WITH T
AS (SELECT A,
B,
C,
D,
COUNT(D) OVER (PARTITION BY A, B, C) AS D_COUNT
FROM EXAMPLE_TABLE)
SELECT *
FROM T
WHERE D_COUNT = @N
关于sql - TSQL 选择一个我也在计算的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17307206/