2016-05-15 5 views
1

BY GROUPに記載されていない同一の値を選択し、GROUP BY句内にリストされていないカラムの同じ値を選択することが何とか可能ですか?SQL - (存在する場合)SQLで

言い換えれば、私はこのような何かをできるようにしたいと思います:それは同じだ場合IDENTICAL_VALUEは(すなわちユニークな)x.bの値を返す必要がありますこれにより

SELECT a, IDENTICAL_VALUE(b) 
FROM x 
GROUP BY a; 

、およびNULLはそうでありません。

+0

? 〜に? –

+0

「ユニーク」という意味で - つまり、「a」でグループ化された「b」のすべての値が同じ場合。 – emkey08

答えて

2

別個の値を数え、ただ1つしかない場合はMAXを返すことができます。

SELECT a, 
     CASE WHEN COUNT(DISTINCT b) =1 THEN MAX(b) END 
FROM x 
GROUP BY a; 

または、代替的に(実際には異なる値を同定する必要がないよう、より良いパフォーマンスであってもよい)ものと同一

SELECT a, 
     CASE WHEN MAX(b) = MIN(b) THEN MAX(b) END 
FROM x 
GROUP BY a; 
+0

これは素晴らしい解決策ですが、これは 'b'カラム内の' NULL'値を無視することに注意してください( 'b'カラムに2つの値' 1'と 'NULL'が含まれていれば'結果として「1」、「NULL」ではない)。 – emkey08

+1

@ emkey08 nullは値ではありません。 [Nullは欠損値のマーカーです](https://en.wikipedia.org/wiki/Null_(SQL))値として数えたい場合、どのようなアプローチになるかははっきりしません。 'ヌル'は一般的に 'ヌル'に等しいと見なされないので、2つのヌルは1つの別個の値か2つになりますか?いずれにしても、 'count(*)'と 'count(b)'を比較して、 'null 'があるかどうか(もしあれば、どれくらいあるか)を識別し、必要に応じてロジックを変更することができます。 –

関連する問題