1

我有一个问题要解决:

- 列出没有城市人口超过 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 |
4

2 回答 2

1
SELECT cc.name
from city c, country cc
where CountryCode = code
group by cc.name
having MAX(c.population) < 1000000;
于 2018-11-09T00:04:12.050 回答
0
  • Count()在您的查询中使用将仅计算人口少于 1000000 的国家/地区的所有城市。Where子句基本上只返回符合您给定条件的城市(人口少于 1000000)。这并不一定意味着一个国家的所有城市都在 1000000 以下。
  • 您需要Group BywithHaving子句,以便检查一个国家的所有城市,这样它们都没有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;
于 2018-10-14T12:40:23.807 回答