我有一张包含渠道收入的表格(跨越多个日期)。我想按渠道对表格进行分组,并在单独的列中将排名靠前的2个渠道排为('Top 2')。底部2个通道在同一列中为(“底部2”)。
我的代码:
SELECT
channel,
SUM(`gross_revenue_usd`) as sum_gross_revenue
FROM table
GROUP BY channel
ORDER BY SUM(`gross_revenue_usd`) DESC
我命令正确。但是我不明白如何制作一个新列来标记前2个和后2个通道。
它应该是这样的:
我也附上照片
任何人都可以指导我该怎么做。我需要这个新列来在我使用的可视化工具中创建过滤器。
您可以使用开窗函数和case语句来执行以下操作:
SELECT channel, sum_gross_revenue,
CASE
WHEN ASCORD <= 2 THEN 'BOTTOM 2'
WHEN DESCORD <= 2 THEN 'TOP 2'
ELSE ''
END AS Ranking
FROM (
SELECT channel, sum_gross_revenue,
ROW_NUMBER() OVER (ORDER BY SUM_GROSS_REVENUE ASC) AS ASCORD,
ROW_NUMBER() OVER (ORDER BY SUM_GROSS_REVENUE DESC) AS DESCORD
FROM (
SELECT
channel,
SUM(`gross_revenue_usd`) as sum_gross_revenue
FROM table
GROUP BY channel
) A
) B
ORDER BY SUM(`gross_revenue_usd`) DESC
注意:我使用了2个子查询来使它更清晰-只能用一个子查询来编写。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句