SQL技术求助:计算线上与POS销售占比拆分
SQL技术支持:计算线上与POS销售占比拆分
需要从performancesales表中计算线上销售(ONLINE)与POS销售的占比拆分,已编写基础查询语句并得到部分结果,但不知道如何添加占比列——该列需按公式(POS/(POS+ONLINE))*100和(ONLINE/(POS+ONLINE))*100计算。
初始查询语句
SELECT CASE WHEN saleschannel = 1 THEN 'ONLINE' WHEN saleschannel = 6 THEN 'ONLINE' WHEN saleschannel = 7 THEN 'ONLINE' WHEN saleschannel = 8 THEN 'ONLINE' ELSE 'POS' END AS CHANNEL, COUNT(*) AS TICKET_QTY FROM performancesales WHERE salesdate BETWEEN '2022-08-01' AND '2023-01-31' AND saleschannel IN ('1','6', '7', '8', '14') GROUP BY CHANNEL ORDER BY 2;
感谢Aaron提供的正确查询思路,已改写代码提升执行效率,最终代码如下:
优化后最终查询语句
SELECT channel, COUNT(*) AS ticket_qty, CAST(100.0 * COUNT(*) / SUM(COUNT(*)) OVER() AS DECIMAL(10,2)) AS percentage_split FROM ( SELECT CASE WHEN saleschannel IN ('2','5','7') THEN 'ONLINE' WHEN saleschannel IN ('0','1','4','6','8') THEN 'POS' ELSE 'OTHER - (AGGREGATOR)' END AS channel, 1 AS ticket FROM performancesales WHERE salesdate BETWEEN '2022-08-01' AND '2023-01-31' AND saleschannel IN ('0','1','2','3','4','5','6','7','8') ) t GROUP BY channel;
内容的提问来源于stack exchange,提问作者Henry Okwuenu
相关产品推荐
相关产品推荐

