首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL按“拥有”所需行进行分组。

SQL按“拥有”所需行进行分组。
EN

Stack Overflow用户
提问于 2016-09-09 13:52:54
回答 2查看 63关注 0票数 0

是否有一种简洁的方法使用HAVING来检查所需的行是否在GROUP BY中?

关于示例日期:

代码语言:javascript
复制
turtle_id   name  
1           Mike
2           Ralph
3           Leo
4           Don

代码语言:javascript
复制
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:

代码语言:javascript
复制
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‘必胜客’的地方

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-09 13:56:38

这应该是可行的:

代码语言:javascript
复制
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表连接以获得名称。

票数 5
EN

Stack Overflow用户

发布于 2016-09-09 14:02:14

将压缩列表放在WHERE子句中,按海龟ID分组,计算挤压类型的不同值,然后只保留至少有2个值的组(或者您在查询中放入多少压缩):

代码语言:javascript
复制
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) = 2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39413187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档