如何从两个数据库中查询数据并按范围对结果进行分组

时间:2019-05-15 20:25:17

标签: mysql sql database

锻炼:

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

Table 1

我还有一个附加表,其中包含有关的更多信息 每个城市; CITY表的架构如下:

table 2

我正在尝试编写一个查询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

输出应如下所示:

output table

2 个答案:

答案 0 :(得分:0)

这是您要执行的操作的正确语法:

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()不能满足您的期望。在大多数数据库中,它将在AVG()模式/数据库中寻找一个名为WEATHER的用户定义函数。
  • 您确实想限定所有列引用。
  • 为此,我添加了表别名作为表名的缩写。
  • case表达式必须位于GROUP BY中。

答案 1 :(得分:0)

尝试一下

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