Sql 创建从多个表获取数据的查询

Sql 创建从多个表获取数据的查询,sql,postgresql,Sql,Postgresql,我试图为我的课堂作业编写查询,但有一个查询特别困难。我遇到问题的查询统计每个国家的所有城市,并显示从最大城市数到最小城市数的城市数。我试图编写的查询的确切定义是 按降序列出国家/地区,从 数据库中城市数量最多,以 数据库中城市数量最少的国家。城市 城市数量相同的城市应按字母顺序排序 从A到Z 现在我将发布我为这个查询尝试过的代码,以及我用来完成它的表 SELECT country.name FROM what.country as name INNER JOIN what.city as c

我试图为我的课堂作业编写查询,但有一个查询特别困难。我遇到问题的查询统计每个国家的所有城市,并显示从最大城市数到最小城市数的城市数。我试图编写的查询的确切定义是

按降序列出国家/地区,从 数据库中城市数量最多,以 数据库中城市数量最少的国家。城市 城市数量相同的城市应按字母顺序排序 从A到Z

现在我将发布我为这个查询尝试过的代码,以及我用来完成它的表

SELECT country.name 
FROM what.country as name 
INNER JOIN what.city as city ON name.country_code = city.country_code 
SORT BY name DESC
这是我正在使用的两张桌子

             Table "what.country"
     Column      |         Type          |               Modifiers              
-----------------+-----------------------+--------------------------------------
 country_code    | character(3)          | not null default ''::bpchar
 name            | character varying(52) | not null default ''::character varying
 continent       | continent             | not null
 region          | character varying(26) | not null default ''::character varying
 surface_area    | real                  | not null default 0::real
 indep_year      | smallint              | 
 population      | integer               | not null default 0
 life_expectancy | real                  | 
 gnp             | real                  | 

             Table "what.city"
    Column    |         Type          |                     Modifiers                  
--------------+-----------------------+-----------------------------------------
 id           | integer               | not null default nextval('city_id_seq'::regclass)
 name         | character varying(35) | not null default ''::character varying
 country_code | character(3)          | not null default ''::bpchar
 district     | character varying(20) | not null default ''::character varying
 population   | integer               | not null default 0

您可以尝试执行以下查询:

SELECT A.name AS name, IFNULL(B.cities, 0) AS cities
FROM what.country AS A
LEFT JOIN (SELECT country_code, count(id) AS cities FROM what.city GROUP BY country_code) AS B
ON A.country_code = B.country_code
ORDER BY cities DESC, name ASC
按降序列出国家/地区,从 数据库中城市数量最多,以 数据库中城市数量最少的国家。城市 城市数量相同的城市应按字母顺序排序 从A到Z

  • 要查找城市数量最多的
    国家
    城市数量最少的国家
    ,我们需要使用
    分组依据
    计数
    ,其中分组依据国家和计数城市
  • 对于
    降序
    使用
    城市计数描述
    ,对于
    相同数量的城市应按字母顺序排序
    使用
    国家名称
代码


我很感激你的解释,它真的帮助了我!提供的查询在PostgreSQL中不起作用,因为没有
排序依据
子句。
SELECT country.name AS country_name, COUNT(city.id) AS city_count
FROM what.country as name 
INNER JOIN what.city as city ON name.country_code = city.country_code
GROUP BY  country.name
ORDER BY city_count DESC, country_name