我有以下数据聚合表:
group_name | period | sum(spend) | count(store_id)
A | pre | 100 | 5
A | current | 150 | 4
B | pre | 80 | 10
B | current | 50 | 10我想用SQL把数据转换成如下形式(其中spend_per_store_id是sum(花费)/count(Store_id),uplift是current /pre之间的比率):
uplift | A | B | A compared to B current | A compared to B pre
sum(spend) | current/pre | current/pre | current/current | pre/pre
spend_per_store_id | current/pre | current/pre | current/current | pre/pre我有点纠结于如何在不使用一大堆case语句和联合all的情况下做到这一点。
编辑:预期输出示例(提供计算而不是实际数字)
uplift | A | B | A compared to B current | A compared to B pre
sum(spend) | 150/100 | 50/80 | 150/50 | 150/80发布于 2020-05-04 23:45:44
将行转置为列的操作是一个透视,有一些简单的、复杂的或专有的方法来进行透视。但对于您来说,最简单的方法可能是使用连接,因为您似乎只有一组数据用于current和pre,您想要将它们关联在一起:
SELECT ..., cur.sumspend / pre.sumspend as percent_spend_change
FROM
(SELECT * FROM table WHERE period = 'pre') pre
INNER JOIN
(SELECT * FROM table WHERE period = 'current') cur
ON pre.group_name = cur.group_name现在,将第一个SELECT ...替换为您想要知道的所有内容的计算。例如,uplift是cur.sumspend / pre.sumspend或cur.sumspend - pre.sumspend (取决于您如何定义"uplift"/as百分比或原始值),依此类推。
https://stackoverflow.com/questions/61596063
复制相似问题