0

3 列のテーブルを想像してみてください。たとえばTRAVELS、列NAMEと、COUNTRYこれまでに行ったDATEことがあり、NAME + COUNTRY 行が重複する可能性があります。

NAME--> 実際の値も実際の値も表示したくありませんCOUNTRY-カウントだけで、複数の国を訪れた人だけです。

次のようなリストになります。

| | 9 | 2 | | 9 人が 2 カ国を訪問したことを意味します。
4 | 3 | | 4 人が 3 カ国を訪問したことを意味します。
2 | 4 | 2 人が 4 カ国を訪れたことを意味します

私はSQLがかなり苦手ですが、ある種のネストされたクエリを作成する必要があると思います:

select count(t1.NAME)
from TRAVELS t1
where (
  select count(distinct COUNTRY) 
  from TRAVELS t2
  where t1.name = t2.name
    and count(t2.COUNTRY) > 1
)

明らかにこれは機能しませんが、私の一般的な意図を示していることを願っています。この種のネストされた二重カウントについては何も見つけることができませんでしたが、一度見たらおそらく十分に単純でしょうか?

4

2 に答える 2

2

ここで試してみてください: http://sqlfiddle.com/#!2/b0762/3

クエリ:

select
    count(*) as people,
    countries_visited
from (
    select
      name,
      count(distinct country) as countries_visited
    from travels
    group by name
    having count(distinct country) > 1
) s
group by countries_visited
order by people desc, countries_visited desc
于 2012-06-06T22:46:45.387 に答える
1
select country_count, count(*) as people_count 
  from (select name, count(distinct country) as country_count 
          from travels 
         group by name 
        having count(distinct country) > 1)
group by country_count

もちろん、これは名前が一意であることを前提としています。そうでない場合は、名前の代わりに user_id を使用することができます。

于 2012-06-06T22:45:04.010 に答える