2016-05-15 64 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值(如果有的话)以及根据需要更改逻辑。 –