0
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

与えられた 2 人の人物 "jane" と "joe" について、彼らが旅行した共通の都市を見つけたいと考えています。そのためのSQLクエリは何ですか。この場合、jane と joe の両方が旅行した共通の都市は「フロリダ」であることがわかります。SQLクエリを使用してそれを見つけるにはどうすればよいですか?

4

2 に答える 2

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;

ジェーン、ジョー、ジャックが旅行した都市のバージョンは次のとおりです。

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)
于 2013-08-22T11:09:29.343 に答える
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
);
于 2013-08-22T11:25:36.890 に答える