是否有一种简洁的方法使用HAVING来检查所需的行是否在GROUP BY中?
关于示例日期:
turtle_id name
1 Mike
2 Ralph
3 Leo
4 Don和
turtle_id crush_for
1 Pizza
1 April Oneil
2 April Oneil
3 Pizza
3 April Oneil
4 Pizza
4 Pizza
4 Science
4 April Oneil而SQL:
SELECT turtle.name
FROM turtle
JOIN turtle_crush ON turtle_crush.turtle_id = turtle.turtle_id
WHERE turtle_crush.crush_for IN ('Pizza', 'April Oneil')
GROUP BY turtle.turtle_id
HAVING (a crush on both "Pizza" and "April Oneil")我意识到我可以做一些像HAVING COUNT(*) > 1这样的事情,但这会给唐(id 4)一个假阳性,因为他两次喜欢‘必胜客’。
编辑:只要添加一个WHERE子句就会返回没有crush_for‘必胜客’的地方
发布于 2016-09-09 13:56:38
这应该是可行的:
SELECT t.turtle_name
FROM turtle t
INNER JOIN (SELECT turtle_id
FROM turtle_crush
WHERE crush_for IN ('Pizza','April Oneil')
GROUP BY turtle_id
HAVING COUNT(DISTINCT crush_for) = 2) tc
on t.turtle_id = tc.turtle_id;在这段代码中,子查询首先过滤crush_for为'Pizza'或'April Oneil'的结果。然后,它按照turtle_id进行分组,另一个条件是选择具有两个不同crush_for值的turtle_id(从而确保只获得具有两个压缩值的turtle_id)。然后将其与turtle表连接以获得名称。
发布于 2016-09-09 14:02:14
将压缩列表放在WHERE子句中,按海龟ID分组,计算挤压类型的不同值,然后只保留至少有2个值的组(或者您在查询中放入多少压缩):
SELECT turtle.name
FROM turtle
INNER JOIN turtle_crush ON turtle_crush.turtle_id = turtle.turtle_id
WHERE crush_for IN ("Pizza", "April Oneil")
GROUP BY turtle.turtle_id
HAVING COUNT(DISTINCT crush_for) = 2https://stackoverflow.com/questions/39413187
复制相似问题