Не уверен, как сформулировать заявление COUNT () - PullRequest
0 голосов
/ 14 октября 2018

У меня есть вопрос, который нужно решить:

- перечислите названия стран, в которых нет городов с населением более 1 000 000 человек.

(я думаю, это будет означать, что COUNT (name) должен получить имена, равные нулю. Я не уверен, как сформулировать это утверждение. Вот мой код, объединены две таблицы.

<mysql>SELECT ct.code, ct.fullname, COUNT(name) FROM city AS cy JOIN country AS ct ON cy.country = ct.code 
WHERE cy.population < 1000000 
GROUP BY ct.code 
ORDER BY ct.code ASC; 

+------+---------------------------------------+-------------+
| code | fullname                              | COUNT(name) |
+------+---------------------------------------+-------------+
| ABW  | Aruba                                 |           1 |
| AFG  | Afghanistan                           |           3 |
| AGO  | Angola                                |           4 |
| AIA  | Anguilla                              |           2 |
| ALB  | Albania                               |           1 |
| AND  | Andorra                               |           1 |
| ANT  | Netherlands Antilles                  |           1 |
| ARE  | United Arab Emirates                  |           5 |

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018
SELECT cc.name
from city c, country cc
where CountryCode = code
group by cc.name
having MAX(c.population) < 1000000;
0 голосов
/ 14 октября 2018
  • Count(), использованный в вашем запросе, просто подсчитает все города в стране с населением менее 1000000. Предложение Where в основном возвращает только те города, которые соответствуют вашему заданному условию ( население менее 1000000).Это не обязательно означает, что все города страны находятся ниже 1000000.
  • Вам необходимо Group By с предложением Having, чтобы проверить все города страны, так что ни один из них не имеет population >= 1000000

Попробуйте следующий запрос:

SELECT ct.code, 
       ct.fullname 
FROM city AS cy 
JOIN country AS ct ON cy.country = ct.code 
GROUP BY ct.code, ct.fullname 
HAVING SUM(cy.population > 1000000) = 0 
ORDER BY ct.code ASC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...