gpt4 book ai didi

mysql - 选择不同行中符合条件的记录

转载 作者:行者123 更新时间:2023-11-29 03:55:53 27 4
gpt4 key购买 nike

假设我有一个 SQL 表 table1

+--------------------------+
| id | person | eats |
+----+--------+------------+
| 1 | 1 | apple |
| 2 | 3 | banana |
| 3 | 2 | orange |
| 4 | 1 | strawberry |
| 5 | 2 | grapes |
| 6 | 4 | apple |
+----+--------+------------+

我想得到所有同时吃apple 和说strawberry 的人。

我试过了

select person 
from table1
where eats in( 'apple', 'strawberry' )

但此查询返回 1, 1, 4,我猜这是因为它分别检查 applestrawberry

如何让所有同时吃applestrawberry 的人?

最佳答案

SELECT person 
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person
HAVING COUNT(DISTINCT eats)=2

更新 对我来说,查询会自行解释。但既然你要求解释,我们一起试试:

您的原始查询返回此结果:

1
1
4

但是你不想得到 1 两次,这意味着你应该按 person 对结果进行分组,这将我们带到下一个查询:

SELECT person 
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person

它将返回:

1
4

但你不想要 person=4 因为它只匹配 apple,所以对我来说最简单的方法是计算不同的 eats 像:

SELECT person, count(distinct eats)
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person

然后我们有这个结果:

person  count(distinct eats)
1 2
4 1

我们准备过滤这个结果集,只得到那些有 2 个(苹果和草莓)的人:

SELECT person, count(distinct eats)
FROM table1
WHERE eats IN( 'apple', 'strawberry' )
GROUP BY person
HAVING count(distinct eats) = 2

这将返回:

person  count(distinct eats)
1 2

但是您没有要求 count,这就是为什么我从 SELECTed 字段列表中删除了 count(distinct eats) 部分。

http://sqlfiddle.com/#!9/ea612/6

关于mysql - 选择不同行中符合条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41042663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com