2015-10-16 194 views
0
SELECT c.STATE, c.CITY, SUM(s.QTY * s.SALEPRICE) 
FROM DWSALE s 
INNER JOIN DWCUST c 
ON s.dwcustid = c.dwcustid 
GROUP BY c.STATE, c.CITY 
ORDER BY c.STATE; 

上面这个电流查询显示的销售总额为每个城市的TOTAL(SUM)量(销售=数量* saleprice),同时也显示出它驻留在状态SQL查询来显示在一个城市销售额最高的每一个国家

客户(在DWCUST中找到)住在城市和国家。 销售记录在DWSALE中并保存销售信息。

我需要查询以显示其各自州的最高销售额的城市。 我不知道该怎么做。

任何帮助表示赞赏!

回答

2

您可以使用ROW_NUMBER()RANK()得到你想要的东西:

SELECT state, city, total 
FROM (SELECT c.STATE, c.CITY, SUM(s.QTY * s.SALEPRICE) as total, 
      ROW_NUMBER() OVER (PARTITION BY c.STATE ORDER BY SUM(s.QTY * s.SALEPRICE)) as seqnum 
     FROM DWSALE s INNER JOIN 
      DWCUST c 
      ON s.dwcustid = c.dwcustid 
     GROUP BY c.STATE, c.CITY 
    ) sc 
WHERE seqnum = 1 
ORDER BY STATE; 

如果你想(在相同状态下多行)的关系,然后利用RANK()代替ROW_NUMBER()

1
with statecitytotal as 
(SELECT c.STATE, c.CITY, SUM(s.QTY * s.SALEPRICE) total 
FROM DWSALE s 
INNER JOIN DWCUST c 
ON s.dwcustid = c.dwcustid 
GROUP BY c.STATE, c.CITY 
ORDER BY c.STATE) 
select * from (select state, city, total, rank() over(partition by state order by total desc) rnk from statecitytotal) where rnk=1 

,但如果总的2个城市是那么相同的两个显示

+0

效果很好,但RNK的事情是存在的,我宁愿它不应该存在。投票你虽然:) –