好吧,这可能听起来很蹩脚,但我要问的可能看起来有些偏执。但是我仍然总是喜欢把我的心脏洒在这里,而不是其他任何地方。
所以我有一个名为 TEMP_CALC 的表格,如下所示:
COUNTRY CITY TEMP
=============================
US Arizona 51.7
US California 56.7
US Bullhead City 51.1
India Jaisalmer 42.4
Libya Aziziya 57.8
Iran Lut Desert 70.7
India Banda 42.4
因此,该表包含区域内某些温度等级的样本数据(仅一些测试数据)。
我想要的是一个查询,它会显示最高温度的城市及其国家名称和温度等级本身。
我做的查询要么给我国家名称和最高温度,要么给我表中的所有行。 到目前为止我尝试的内容如下:
这只给我 COUNTRY 和 TEMP -
****************************
select country,max(temp)
from temp_calc
group by country
当我尝试将这些城市名称包含在这些温度中时,它会给我表中的所有行 -
*************************
select country,city,max(temp)
from temp_calc
group by country,city
我想要最高温度的城市以及国家名称和温度等级本身。
答案 0 :(得分:3)
如果我理解正确,你想要每个国家的温度最高的城市。这通常使用窗口函数完成:
select country,city,temp
from (
select country,city,temp,
row_number() over (partition by country order by temp desc) as rn
from temp_calc
) t
where rn = 1
order by country, city;
答案 1 :(得分:1)
您第一次尝试就有解决方案:
select country,max(temp)
from temp_calc
group by country
您只需将相应的城市添加到结果集即可。你可以这样做:
with max_temp as (select country, max(temp) m_temp
from temp_calc
group by country)
select country, city, temp
from temp_calc where
temp=max_temp.m_temp and
country=max_temp.country;
这应该允许您根据最大临时值过滤表中的结果。
答案 2 :(得分:1)
select * from (
select *, ROW_NUMBER() over (partition by country order by country,temp desc) as sortid,
from temp_calc ) t
where sortid =1