我正在编写一堆查询,这些查询从多个表中获取信息或实际使用子查询来初始化它们。我现在遇到问题的查询实际上应该创建另一个不在任何一个表中的字段。我写的查询的确切定义如下......
列出该国家/地区的所有城市的国家/地区名称,人口和人口总和。在查询中添加第四个字段,用于计算每个国家/地区的城市人口百分比。 (为了这个例子的目的,假设为一个国家列出的所有城市的人口总和代表该国家的整个城市人口。)按照城市人口百分比的递增顺序排序该查询的结果。
我为此查询尝试的代码如下
SELECT name, population, SUM(population) FROM what.country JOIN what.city ON city.country_code =
country.country_code GROUP BY population ASC
我正在使用的表是
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
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
答案 0 :(得分:1)
你解决了大部分问题 - 唯一缺少的是你可以通过将城市人口(你已经计算过的)的总和除以总人口来实现城市人口的百分比:
SELECT cnt.name AS country_name,
cnt.population AS total_population,
SUM(cty.population)/(cnt.population) * 100 AS urban_percentage
FROM what.country cnt
JOIN what.city cty ON cty.country_code = cnt.country_code
GROUP BY cnt.name
ORDER BY 3 ASC