3

フィールド A、B、および C でグループ化されたフィールド D の個別の値の数をカウントしようとしています。カウントが 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値が1 つだけあるため、 orを使用してその値を確認できます。DMAXMIN

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 に答える