3

我试图计算字段 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”不包含在聚合或分组中的问题。有什么想法吗?

4

2 回答 2

5

由于每个组中只有一个非NULL值,D您可以使用其中一个MAXMIN查看该值是什么。

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
于 2013-06-25T20:47:01.243 回答
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
于 2013-06-25T20:49:47.147 回答