我有一张包含以下相关字段的表格:
$ grep -rl bar > tmp.x
$ grep -rl foo --exclude-from=tmp.x ; rm tmp.x
我想选择所有entity_id | grouping_id | type_id
---------------------------------
1 | 1 | 1
2 | 1 | 1
3 | 1 | 2
4 | 2 | 1
5 | 2 | 2
个值,其中有n个类型的X数和类型为m的Y个数。我最初认为可行的例子:
grouping_id
理论上会返回所有select grouping_id from t_entities
group by grouping_id, type_id
having
count(case type_id when 1 then 1 else null end) = 2
and
count(case type_id when 2 then 1 else null end) = 1
值为2的类型1和1的类型2,但因为该子句也是按type_id进行分组,所以我什么都没回来,因为每个组都是独立存在的,但如果我丢弃了按type_id分组然后我得到聚合错误。有没有办法在不使用临时表的情况下将其作为原始查询?
答案 0 :(得分:1)
根据您的查询,您走在正确的轨道上,但不是按type_id
进行分组,而应该按grouping_id
进行分组。通过按type_id
进行分组,您无法获得具有两个不同值的内容,因此and
中的having
条款无法使用。您应该能够执行以下操作以返回grouping_id =1
作为结果:
select grouping_id
from t_entities
group by grouping_id
having count(case type_id when 1 then 1 else null end) = 2
and count(case type_id when 2 then 1 else null end) = 1;