锻炼:
我有一个名为WEATHER的表格,它记录着城市的温度,其格式如下:
我还有一个附加表,其中包含有关的更多信息
每个城市; CITY
表的架构如下:
我正在尝试编写一个查询WEATHER
和CITY
表并输出
以下:
每个国家的最高温度,按城市人口分类为:
我已经搜索了有关如何创建别名以及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
输出应如下所示:
答案 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);
请注意更改:
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