id | person | cities travelled | distance
----------+---------+-------------+-----------
1 | jack | japan | 8
2 | Joe | florida | 11
3 | Joe | california | 215
4 | Jane | ghana | 3
5 | Jane | florida | 8
6 | Joe | jakarta | 11
7 | Joe | california | 215
8 | Joe | japan | 3
对于两个给定的人“简”和“乔”,我想找到他们旅行的共同城市。什么是sql查询。在这种情况下,我们可以看到珍妮和乔都走过的普通城市是“佛罗里达”。如何在sql查询的帮助下找到它?
答案 0 :(得分:2)
您可以使用group by
和having
:
select CitiesTravelled
from t
group by CitiesTravelled
having sum(person = 'Joe') > 0 and
sum(person = 'Jane') > 0;
通过将逻辑放在having
子句中,您可以轻松地概括查询。以下是Jane 或 Joe的版本:
select CitiesTravelled
from t
group by CitiesTravelled
having sum(person = 'Joe') > 0 or
sum(person = 'Jane') > 0;
以下是Jane,Joe和Jack旅行的城市版本:
select CitiesTravelled
from t
group by CitiesTravelled
having sum(person = 'Joe') > 0 and
sum(person = 'Jane') > 0 and
sum(person = 'Jack') > 0;
编辑:
如果您想添加行进距离,可以将select
更改为:
select CitiesTravelled, min(DistanceTravelled)
select CitiesTravelled, avg(DistanceTravelled)
select CitiesTravelled, max(case when person = 'Jane' then DistanceTravelled end)
答案 1 :(得分:0)
select CitiesTravelled
from t
where person = 'Joe'
and CitiesTravelled in (
select CitiesTravelled
from t
where person = 'Jane'
);
或
select CitiesTravelled
from t t1
where person = 'Joe'
and exists (
select t2.CitiesTravelled
from t t2
where t2.person = 'Jane'
and t2.CitiesTravelled = t1.CitiesTravelled
);