2016-05-15 38 views
1

在GROUP未列出的相同值在SQL中,是它在某種程度上可以選擇一列,其是未子句GROUP BY中列出的相同值(如果存在的)?SQL - 選擇BY

換句話說,我希望能夠做這樣的事情:

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

藉助於此IDENTICAL_VALUE應返回x.b值,如果是相同的(即唯一的),和NULL否則。

+0

相同的是什麼?到? –

+0

在「唯一」的意義上相同 - 即當由「a」分組的所有「b」值相同時。 – emkey08

回答

2

您可以計算不同的值,只需返回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」列包含兩個值「1」和「NULL」,這將返回' 1'作爲結果,而不是'NULL')。 – emkey08

+1

@ emkey08 nulls不是值。 [空值是缺少值的標記](https://en.wikipedia.org/wiki/Null_(SQL))如果您想將它們計數爲值,則不清楚該方法是什麼。 'null'通常不被認爲等於'null',那麼兩個空值是一個不同的值還是兩個?在任何情況下,您都可以將count(*)與count(b)進行比較,以確定是否存在任何null值(如果有的話)以及根據需要更改邏輯。 –