首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL:每个饮酒者经常使用的条(使用不存在)

SQL:每个饮酒者经常使用的条(使用不存在)
EN

Stack Overflow用户
提问于 2016-09-24 23:10:47
回答 1查看 247关注 0票数 1

我正在努力学习如何正确地使用NOT EXISTS及其背后的逻辑。我有一个疑问:

酒吧是每个饮酒者常去的地方

与此frequents表一起:

从表上看,我知道结果应该是Blue Angel。我从这样的事情开始(这并没有给我想要的东西):

代码语言:javascript
复制
SELECT f.bar 
FROM frequents f 
WHERE NOT EXISTS(
    SELECT ff.drinker 
    FROM frequents ff 
    WHERE f.drinker <> ff.drinker 
        AND f.bar = ff.bar
);

因此,如果f.bar是“A.P.Stump‘s”,我必须检查表中的其他名称是否也经常出现“A.P.Stump’s”。我好像想不出该怎么做。

我该怎么做?请注意,我必须在查询中使用NOT EXISTS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-24 23:38:01

我会用group byhaving来做这个

代码语言:javascript
复制
select bar
from frequents b
group by bar
having count(*) = (select count(distinct drinker) from frequents);

这个查询只是计算每个酒吧的饮酒者人数。如果计数与饮酒者总数相匹配,则"bar“通过并在结果集中。

这假设frequents表没有bar/drinker的重复行。如果是这样,请使用count(distinct drinker)而不是count(*)

虽然这可以作为一个NOT EXISTS查询(实际上,在查询中有两个NOT EXISTS ),但我发现这样做是没有用的。如果您正在学习SQL,嵌套NOT EXISTS是一个有趣的思想练习。聚合更加灵活,可以解决范围更广的问题(例如,大多数饮酒者经常光顾多少酒吧)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39681802

复制
相关文章

相似问题

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