大家好,今天给大家分享一个实际业务中的SQL数据取数需求:计算销售额TOP10的城市的TOP10产品。先给出我的方法,但是,这个方法肯定不是最佳的解决方案,仅供参考。首先说明这里面有两张表,1张为销售订单表记录的是每笔销售订单的明细,例如订单的交易时间、产品ID,但是,这个表中没有产品名称,需要通过产品ID去关联产品表,然后获取到产品名称。我这里面的思路是利用开窗函数计算出销售额排名前10的城市,然后把这个作为一个子查询去筛选满足这些个城市的数据集。返回的结果通过关联产品表获取到产品名称然后依然使用开窗函数计算出每个城市及产品的销售额,然后对每个城市的产品销售额进行分组排名,只选择哪些销售排名在1-10名之间的产品,最后得到所需要的结果。

sql脚本仅供参考,大家有好的方法欢迎留言讨论,谢谢!
WITH temp AS (SELECTt2.城市FROM(SELECTt1.城市,t1.销售额合计,ROW_NUMBER ( ) OVER ( ORDER BY t1.销售额合计 DESC ) AS rnkFROM( SELECT 城市, SUM ( 销售额 ) AS 销售额合计 FROM 订单数据$ GROUP BY 城市 ) t1) t2WHEREt2.rnk<= 10)selectt4.*from(SELECTt3.城市,t3.产品名称,t3.salesTotal,row_number ( ) OVER ( partition BY 城市 ORDER BY t3.salesTotal DESC ) AS rnk1FROM(SELECTo.城市,p.[产品名称],SUM ( o.销售额 ) AS salesTotalFROM[订单数据$] AS oLEFT JOIN [产品数据页$] AS p ON o.[产品ID] = p.[产品ID]WHEREo.[城市] IN ( SELECT * FROM temp )GROUP BYo.城市,p.[产品名称]) as t3) as t4where t4.rnk1<=10
文章转载自PowerBI Home,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




