除了嵌套的 GROUP BY,还有其他选择吗?

Is there an alternative to doing nested GROUP BYs?

我正在尝试查找分配给多个位置的 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

我正在尝试 return 这些 ID:

Id 
--
23
27
29

这实现了 "I'm trying to find IDs that are assigned to multiple locations."

的目标

一个简单的方法使用一个 group by:

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

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

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

您正在寻找具有多个位置的 ID:

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