2012-06-06 2 views
0

3 열로 구성된 표가 있다고 가정하면 NAME 및 열이 중복되어 NAME + COUNTRY 행이 중복 될 수 있습니다. TRAVELS이라고 가정 해 보겠습니다.어떻게 두 개의 count() 문을 중첩합니까?

-> 내가 실제 NAME 값이나 실제 COUNTRY 값을 표시하지 않으려는 - 그들의 만 개 이상의 국가를 방문하는 사람들을 위해입니다.

그것은이 같은 목록이 될 것입니다 :

| 9 | 2 | 의미 9 명이 2 개국을 방문했으며,
| 4 | 3 | 의미 4 명이 3 개국을 방문했습니다.
| 2 | 4 | 이명을 의미 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 
) 

을 이것은 효과가 없지만 내 일반적인 의도를 보여주기를 바랍니다. 이 유형의 중첩 된 이중 계산식에 대해서는 아무 것도 찾을 수 없었지만, 한번 볼 때 충분히 간단 할 수 있습니다.

답변

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 대신 user_id를 사용할 수 있습니다.

+0

가 쉽게 읽을 수 있기 때문에 나는이 솔루션을 선호합니다. MySQL이 쿼리를 받아들이도록 'my_table'을 추가해야했습니다. –

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 
+0

@ TorbenGundtofteBruun, 내 솔루션이 도움이 되었습니까? 그렇다면 대답을 받아 들일 수 있습니까? – spatar

+0

잠자기 시간을내어 답변을 읽고 시험해보고 답변 해드립니다 .-) –

+0

예, 작동합니다. 결과의 열은 허용 된 응답과 비교하여 바뀝니다. –

관련 문제