我正在尝试计算字段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”未包含在聚合或组中的问题。 有任何想法吗?
答案 0 :(得分:5)
由于每个组中只有NULL
个非D
值,您可以使用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
答案 1 :(得分:2)
尝试这样的事情:
SELECT A, B, C, MAX(D) AS D, COUNT(D) AS D_COUNT
FROM EXAMPLE_TABLE
GROUP BY A, B, C
HAVING COUNT(D) = 1