【问题标题】:Merge rows in redshift db based on 1-5 values根据 1-5 个值合并 redshift db 中的行
【发布时间】:2022-08-03 03:48:16
【问题描述】:

我有一张这样的红移表:

date filter_name1 filter_value1 filter_name2 filter_value2 total_cases total_spent
2022-01-01 sex male state Arizona 15 123.1
2022-02-01 sex female state Ohio 66 66.7
2022-02-01 sex male state Arizona 12 54
2022-01-01 sex female state California 11 121
2022-01-01 sex male state Arizona 43 96.63

现在我想“合并”基于 filter_values 的行,其数字可以从 1 到 5 不等。我想将所有不同的日期推入一个数组。如果日期相等,它还应该将它们的 total_cases 和 total_spent 相加,并以与日期数组相同的顺序将它们推送到数组中。可以有比 2 更多的不同日期。

预期输出为:

date filter_name1 filter_value1 filter_name2 filter_value2 total_cases (sum) total_spent (sum)
[\"2022-01-01\", \"2022-02-01\"] sex male state Arizona [58, 12] [219.73, 54]
[\"2022-01-01\", \"2022-02-01\"] sex female state Ohio [0, 66] [0, 66.7]
[\"2022-01-01\", \"2022-02-01\"] sex female state California [11, 0] [121, 0]

我提出了下面的查询,但我不知道如何根据 filter_values 合并行)。

select listagg(distinct date, \', \') within group (order by filter_value1) as date, 
listagg(distinct filter_value1) as filter_value1, 
listagg(distinct filter_value2) as filter_value2,  
SUM(total_spent) as total_spent from TABLE 
group by date, filter_value1, filter_value2;

    标签: sql database amazon-redshift


    【解决方案1】:

    您想要执行 GROUP BY 并使用 LISTAGG() 将值组合到列表中。类似(概念)的东西:

    select filter_value1, listagg(total_spent, ', ') within group as total_spent
    from <table>
    group by filter_value1;
    

    您将需要按列的完整列表进行分组并添加方括号等。这应该可以帮助您入门。

    【讨论】:

    • 嘿,是的,感谢您回答@Bill。我已经尝试了几次,但我被困在按日期分组上。我无法根据过滤器值“合并”它们,然后将日期和 total_spent 推送到数组中。 select listagg(distinct date, ', ') within group (order by filter_value1) as date, listagg(distinct filter_value1) as filter_value1, listagg(distinct filter_value2) as filter_value2, SUM(total_spent) as total_spent from TABLE group by date, filter_value1, filter_value2;
    • 听起来你有这个工作。如果是这样,做得很好。如果没有,请再次 ping,我可以提供帮助。
    • 我得到了这个部分工作。但我不能把它合并。通过上面的查询,我分别获取日期,我需要将它们放在一个数组中:(
    • 因此,您只需将方括号添加到字符串( '[' & ']' )还是需要将其转换为超级数据类型?
    • 根据上面的查询,我想合并具有相同 filter_values 的行。它不必是一个数组(也许可以是一个逗号分隔的字符串),我只希望它们组合起来我无法完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 2016-01-06
    • 2019-12-04
    相关资源
    最近更新 更多