在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