是否有替代嵌套GROUP BYs?

时间:2016-03-31 18:56:50

标签: sql postgresql group-by netezza

我正在尝试查找分配给多个位置的ID。注意26和28的ID有多条记录,但具有相同的loc,因此我不希望它们出现在结果集中。数据可能如下所示:

Id | loc
-------
23 | A
23 | B
24 | A
25 | A
26 | A
26 | A
27 | A
27 | B
28 | B
28 | B
29 | A
29 | B

我目前正在做的是:

Select id
FROM (
    Select id, loc, count(*) 
    from tbl 
    GROUP BY id, loc 
    HAVING COUNT(*)>1 
    ) grped
GROUP BY id
HAVING COUNT(*)>1

我试图返回这些ID:

Id 
--
23
27
29

2 个答案:

答案 0 :(得分:1)

您正在寻找包含多个位置的ID:

select id
from tbl 
group by id
having count(distinct loc) > 1;

答案 1 :(得分:0)

这解决了“我正在尝试查找分配给多个位置的ID。”的目标。

一种简单的方法是使用一个group by

select id
from tbl
group by id
having min(loc) <> max(loc);

注意:这与您的逻辑略有不同,因为它会忽略NULL个值,而您的版本会将NULL个locs视为另一个值。可以修改上述内容以考虑到这一点:

select id
from tbl
group by id
having (min(loc) <> max(loc)) or
       (min(loc) is not null and count(loc) <> count(*))