基于州和城市的SQL排名

基于州和城市的SQL排名,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个数据集。第一个包含州名、城市名,另一个包含温度信息。我怎样才能按州排名,然后按城市排名 select RANK() over(order by AVG(Average_Temp) desc) State_Rank_Temp, aqs_sites.State_Name, RANK() over(partition by State_Name order by AVG(Average_Temp) desc) City_Rank, aqs_sites.City_Name, AV

我有两个数据集。第一个包含州名、城市名,另一个包含温度信息。我怎样才能按州排名,然后按城市排名

select RANK() over(order by AVG(Average_Temp) desc) State_Rank_Temp, aqs_sites.State_Name, 
       RANK() over(partition by State_Name order by AVG(Average_Temp) desc) City_Rank, aqs_sites.City_Name, AVG(Temperature.Average_Temp) Average 
from aqs_sites INNER JOIN
    Temperature
     ON (aqs_sites.State_Code=Temperature.State_Code AND 
         aqs_sites.County_Code=Temperature.County_Code AND 
         aqs_sites.Site_Number=Temperature.Site_Num)
group by aqs_sites.City_Name, aqs_sites.State_Name;

嗯。在进行排名之前,您需要获得州一级的平均值。这里有一种方法:

select s.State_Name, 
       s.City_Name,
       avg(t.Average_Temp) as average 
       rank() over (partition by s.State_Name order by avg(t.Average_Temp) desc) as City_Rank, 
       dense_rank() over (order by avg(state_average))
from aqs_sites s INNER JOIN
     (select t.*, avg(Average_Temp) over (partition by state_code) as state_average
      from Temperature t
     ) t
     ON s.State_Code = t.State_Code AND 
        s.County_Code = t.County_Code AND 
        s.Site_Number = t.Site_Num
group by s.City_Name, s.State_Name;

问题是温度中没有状态列可供划分,状态_平均值不包含在任何聚合函数或函数中groupby@logdog . . . 有一个国家专栏,我只是把名字弄错了。它是
state\u code
.densite\u rank()超过(按平均值(state\u average)desc排序)City\u rank..添加了平均值,然后它工作了。。谢谢:)