【问题标题】:Using SQL windows functions to write a query the calculates the running total of city populations in a country使用 SQL windows 函数编写查询,计算一个国家/地区的城市人口总数
【发布时间】:2014-04-12 18:03:53
【问题描述】:

这是我应该使用 2 个不同的表编写的查询:一个称为 country,包含所有国家名称、国家人口和国家代码,另一个称为 city,包含城市 ID、国家代码、城市名称和城市人口。国家代码当然是主键。结果表必须打印国家名称作为国家,城市名称作为城市,城市人口作为人口以及一个国家内每个城市人口的总和。

  1. 使用 SQL 窗口函数,编写一个查询,计算每个国家所有城市人口的总和。这个运行总数应该通过从最大到最小累加城市人口来计算。结果输出应首先按国家名称排序,然后按运行总计列排序。同时在每一行中显示城市名称和城市人口。

这就是我可以很好地打印表格的内容,但运行总计列无法正常工作。我需要确保它将特定国家/地区内的所有城市人口相加,以便该国家/地区更改之前的最后一个城市名称=该国家/地区的总人口。它必须按国家名称排序,然后是城市人口或运行总数。

SELECT country.name AS country, 
   city.name AS city, 
   city.population, 
   sum(city.population) OVER (ORDER BY city.population, country.name) 
FROM lab6.country INNER JOIN lab6.city USING (country_code) 
ORDER BY country.name ASC, city.population DESC;

谁能提供一些关于为什么这不起作用以及可能需要进行哪些更改的见解?

【问题讨论】:

  • mysql 什么时候有窗口函数了?你有没有看过psql的标签信息?您使用的是什么数据库和版本?

标签: php mysql sql database psql


【解决方案1】:

您需要按国家/地区分区:

SELECT country.name AS country, 
   city.name AS city, 
   city.population, 
   sum(city.population) 
   OVER (PARTITION BY country.name
         ORDER BY city.population DESC
         ROWS UNBOUNDED PRECEDING) 
FROM lab6.country INNER JOIN lab6.city USING (country_code) 
ORDER BY country.name ASC, city.population DESC;

【讨论】:

    猜你喜欢
    • 2016-09-04
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多