在GROUP未列出的相同值在SQL中,是它在某種程度上可以選擇一列,其是未的子句GROUP BY
中列出的相同值(如果存在的)?SQL - 選擇BY
換句話說,我希望能夠做這樣的事情:
SELECT a, IDENTICAL_VALUE(b)
FROM x
GROUP BY a;
藉助於此IDENTICAL_VALUE
應返回x.b
值,如果是相同的(即唯一的),和NULL
否則。
在GROUP未列出的相同值在SQL中,是它在某種程度上可以選擇一列,其是未的子句GROUP BY
中列出的相同值(如果存在的)?SQL - 選擇BY
換句話說,我希望能夠做這樣的事情:
SELECT a, IDENTICAL_VALUE(b)
FROM x
GROUP BY a;
藉助於此IDENTICAL_VALUE
應返回x.b
值,如果是相同的(即唯一的),和NULL
否則。
您可以計算不同的值,只需返回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;
這是一個很好的解決方案,但應該注意的是,這將忽略「b」列中的任何「NULL」值(即如果「b」列包含兩個值「1」和「NULL」,這將返回' 1'作爲結果,而不是'NULL')。 – emkey08
@ emkey08 nulls不是值。 [空值是缺少值的標記](https://en.wikipedia.org/wiki/Null_(SQL))如果您想將它們計數爲值,則不清楚該方法是什麼。 'null'通常不被認爲等於'null',那麼兩個空值是一個不同的值還是兩個?在任何情況下,您都可以將count(*)與count(b)進行比較,以確定是否存在任何null值(如果有的話)以及根據需要更改邏輯。 –
相同的是什麼?到? –
在「唯一」的意義上相同 - 即當由「a」分組的所有「b」值相同時。 – emkey08