【问题标题】:SQL Query to show highest sales in a City for EACH StateSQL 查询以显示每个州在城市中的最高销售额
【发布时间】:2015-10-16 12:16:04
【问题描述】:
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;

上面的当前查询显示了每个城市的总销售额 (SUM) (sale = qty * saleprice),同时还显示了它所在的州。

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

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

感谢任何帮助!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以使用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()

    【讨论】:

      【解决方案2】:
      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 个城市的总数相同,则会显示两者

      【讨论】:

      • 效果很好,但 rnk 的东西在那里,我宁愿它不在那里。不过投票给你:)
      猜你喜欢
      • 2015-02-26
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 2015-09-16
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      相关资源
      最近更新 更多