mysql - SQL:每个饮酒者经常光顾的酒吧(使用 NOT EXISTS)

标签 mysql sql

我正在尝试学习如何正确使用 NOT EXISTS 及其背后的逻辑。我有这个查询:

Bars which every drinker frequents

连同这个频率表:

enter image description here

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

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

最佳答案

我会使用 group byhaving 来做到这一点:

select bar
from frequents b
group by bar
having count(*) = (select count(distinct drinker) from frequents);

此查询仅计算每个酒吧中饮酒者的数量。如果计数与饮酒者总数相匹配,则“酒吧”通过并在结果集中。

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

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

关于mysql - SQL:每个饮酒者经常光顾的酒吧(使用 NOT EXISTS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681802/

相关文章:

php - 一般错误 : 1366 Incorrect string value: '\xF0\x9F\x8D\xB8 !...'

MySQL - 将数据从一个表复制到另一个

mysql - 如果MySQL返回空结果集,如何返回null?

php - 使用 DBH 在 PHP 中循环 MySQL 查询

php - 无法在 php 和 mysqli_query 上提交表单

php - 当该单元格没有数据时,我想在表格中显示一个空单元格

mysql - 如何跨多种数据库类型测试 SQL 语句?

sql - SQL JOIN 中的 AND/OR 语句

sql - 区别于窗口函数。大查询

java - 如何正确构造此 SQL 查询