sql - 如何在没有不需要的值的情况下将列包含在组中

标签 sql oracle greatest-n-per-group

好吧,这听起来可能很蹩脚,但我要问的问题可能看起来有点幼稚。但与其他任何地方相比,我总是更愿意在这里倾诉心声。

所以我有一个名为 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

因此,该表包含区域中某些温度等级的样本数据(只是一些测试数据)。

我想要的是一个查询,它会显示最高温度的城市及其国家名称和温度等级本身。

我所做的查询要么给我国家名称和最高温度,要么给我表格中的所有行。 到目前为止我的尝试如下:

这只给我 COUNTRYTEMP -

****************************
select country,max(temp) 
from temp_calc
group by country

当我尝试将城市名称附加到这些温度时,它会为我提供表中的所有行 -

*************************
select country,city,max(temp) 
from temp_calc
group by country,city

我想要最高温度的城市以及国家名称和温度等级本身。

最佳答案

如果我没理解错的话,你想要每个国家温度最高的城市。这通常是使用窗口函数完成的:

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;

关于sql - 如何在没有不需要的值的情况下将列包含在组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44624348/

相关文章:

oracle - 在 oracle DB 中创建用于查找和删除特定表的外键约束的过程

MYSQL GROUP BY 和 WHERE 子句

mysql - 根据另一个表的查询检索一个表中的最后一个条目

mysql - 即使不满足其中一个 where 子句,也会在 SQL 中返回结果

c# - SQL 或 C# : Loop through values of one field and insert into another

sql - postgreSQL - 从许多列中获取最频繁的值

oracle - 在协作的,版本控制的环境中,您如何处理Oracle软件包?

php - Where IN 子句中的条件和条件

sql - Oracle数据库搜索所有表中的字符串,返回行数据

mysql - 需要按类别选择5条最新记录?