【问题标题】:How to query data from two databases and group results by range如何从两个数据库中查询数据并按范围分组结果
【发布时间】:2019-05-15 20:25:16
【问题描述】:

运动:

我有一个名为 WEATHER 的表格,它记录了城市的温度,其格式如下:

我还有一个额外的表格,其中包含有关以下方面的更多信息 每个城市; CITY表的schema如下:

我正在尝试编写一个查询 WEATHERCITY 表并输出 以下:

每个国家的最高气温,按城市人口分类如下:

  • 小城市:人口规模小于 100 万
  • 中等城市:100 万至 500 万人口
  • 大城市:人口超过 500 万

我已经搜索了有关如何创建别名以及 CASE 语句如何在 SQL 上工作的方法和示例,但我正在努力获得所需的输出。

这是我设法得到的:

SELECT
    CITY.Country,
    WEATHER.AVG(Maximum_Temperature) as Max_Temp,
    case CITY.Population
        when < 1000000 then "Small"
        when > 5000000 then "Large"
        else "Medium"
FROM
    CITY
INNER JOIN
    WEATHER
ON
    WEATHER.City_Name = CITY.City_Name
GROUP BY 
    CITY.Country

输出应该是这样的:

【问题讨论】:

标签: mysql sql database


【解决方案1】:

这是您尝试执行的正确语法:

SELECT C.Country, AVG(W.Maximum_Temperature) as Max_Temp,
        (case when c.Population < 1000000 then 'Small'
              when c.Population > 5000000 then 'Large'
              else 'Medium'
         end)
FROM CITY C INNER JOIN
     WEATHER W
     ON W.City_Name = C.City_Name
GROUP BY C.Country,
         (case when c.Population < 1000000 then 'Small'
              when c.Population > 5000000 then 'Large'
              else 'Medium'
          end);

注意变化:

  • SQL 使用单引号来分隔字符串,而不是双引号(尽管某些数据库支持扩展功能)。
  • 语法WEATHER.AVG() 不符合您的预期。在大多数数据库中,它会在 WEATHER 架构/数据库中查找名为 AVG() 的用户定义函数。
  • 您确实希望限定所有列引用。
  • 为了解决这个问题,我添加了表别名作为表名的缩写。
  • case 表达式需要在 GROUP BY 中。

【讨论】:

  • 您好,感谢您的帮助。
【解决方案2】:

试试看,

SELECT
    CITY.Country Country,
    CASE 
        WHEN CITY.Population < 1000001 'Small'
        WHEN CITY.Population < 5000001 'Medium'
        ELSE 'Large'
    END City_Size,
    WEATHER.AVG(Maximum_Temperature) as Max_Temp
FROM
    CITY
INNER JOIN
    WEATHER
ON
    CITY.City_Name = WEATHER.City_Name
GROUP BY 
    CITY.Country

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多