2016-04-11 2 views
0
select count(name),continent 
from world 
where population <= 25000000 
group by continent 

Когда я запускаю следующий запрос на мировой таблице следующих результаты оказалисьФильтрация строки из из результирующего

COUNT(NAME) ; CONTINENT 
=================================== 
26   ; North America 
**17  ; Oceania** 
7   ;  South America 
41   ;  Europe 
42   ;  Africa 
24   ;  Asia 

Опять я побежал следующий запрос

select count(name) 
from world 
group by continent 

следующие Результаты представлены

COUNT(NAME) ; CONTINENT 
=================================== 
29  ; North America 
**17  ;  Oceania** 
12  ; South America 
49  ;  Europe 
54  ;  Africa 
42  ;  Asia 

Учитывая это, как две таблиц я попытался извлечь строки, которые имеют общие count(name)

значения я выполнить этот запрос

select count(name),continent 

из мира
группы по континентам
, имеющего кол (имя) в ( выберите кол (имя) от мира, где население < = 25000000 группы по континентам)

привела

COUNT(NAME) ; CONTINENT 
================================ 
17   ; Oceania <--------- thought I will get only this row 
42   ; Asia 

теперь снова я был выполнить этот запрос

select count(name),continent from world where population <= 25000000 group by continent having count(name) in (select count(name) from world group by continent) 

COUNT(NAME) ;CONTINENT 
=============================== 
17  ; Oceania 
42  ; Africa 

У меня вопрос о Азии и Африке идет в результирующем наборе

, но как я могу фильтровать их слишком Предположим, что я использую MY SQl

(Лечить меня, как абсолютный новичок и простите за плохое редактирование не может помочь ему)

ответ

0

При запуска:

SELECT count(name), continent FROM world 
WHERE population <= 25000000 GROUP BY continent 

Выбираете количество стран с населением менее 250 м. Океания и Африка включены в эти ряды.

COUNT(NAME) ; CONTINENT 
=================================== 
26   ; North America 
**17  ; Oceania** 
7   ;  South America 
41   ;  Europe 
42   ;  Africa 
24   ;  Asia 

Далее выполнить:

HAVING count(name) in (SELECT count(name) FROM world GROUP BY continent) 

Т.е. включают только строки, в которых число в COUNT (NAME) находится в столбце COUNT (NAME) вашего результирующего набора без WHERE. Oceania имеет 17 в обоих наборах результатов, поэтому он включен. Africa имеет COUNT(NAME)=42 в первом (WHERE) результирующем наборе. Используя ваш оператор HAVING, он совпадает с Asia во втором результирующем наборе.

Таким образом, мы показываем две строки:

COUNT(NAME) ; CONTINENT 
=================================== 
17  ; Oceania 
42   ;  Africa 

Это, вероятно, что вы хотите (обратите внимание на добавленный WHERE):

SELECT count(worldA.name) as cnt, worldA.continent FROM world worldA 
WHERE worldA.population <= 25000000 GROUP BY worldA.continent 
HAVING cnt in 
    (SELECT count(worldB.name) FROM world worldB 
    WHERE worldB.continent = worldA.continent 
    GROUP BY worldB.continent);