SQL Query显示每个城市的最高销售额

时间:2015-10-16 12:16:05

标签: sql oracle

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;

上面的当前查询显示了每个城市的销售总额(销售额=数量*销售价格),同时还显示了其所在的州。

客户(在DWCUST中找到)住在城市和州。 销售额记录在DWSALE中并保留销售信息。

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

感谢任何帮助!

2 个答案:

答案 0 :(得分: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 :(得分: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个城市的总数相同,则显示两个城市