我有一个数据库表,内容如下:
Id | Label | GroupId | DueDate | Amount |
---|---|---|---|---|
1 | (null) | A | 1/1/2023 | 100.00 |
2 | (null) | A | 1/2/2023 | 101.00 |
3 | L1 | A | 1/3/2023 | 102.00 |
4 | L1 | A | 1/4/2023 | 103.00 |
5 | (null) | B | 1/3/2023 | 104.00 |
6 | L1 | C | 1/3/2023 | 105.00 |
7 | (null) | A | 1/4/2023 | 106.00 |
8 | (null) | A | 1/5/2023 | 107.00 |
9 | L2 | A | 1/5/2023 | 108.00 |
10 | L2 | A | 1/6/2023 | 109.00 |
我想用SELECT语句实现的是,在单行项目中报告具有相同值的‘Label’和‘group id’的记录,为金额提供一个sum(),为日期提供一个min().不应对标签列中具有空值的记录进行分组.
我的理想结果集应该如下所示:
Label | GroupId | DueDate | Amount |
---|---|---|---|
(null) | A | 1/1/2023 | 100.00 |
(null) | A | 1/2/2023 | 101.00 |
L1 | A | 1/3/2023 | 205.00 |
(null) | B | 1/3/2023 | 104.00 |
L1 | C | 1/3/2023 | 105.00 |
(null) | A | 1/4/2023 | 106.00 |
(null) | A | 1/5/2023 | 107.00 |
L2 | A | 1/5/2023 | 217.00 |
如果有什么不同的话,那就是我的RDBMS是Postgres,所讨论的数据表大约有5亿行数据.
这可以作为使用CASE子句的单个SELECT语句吗?或者,是否有必要通过UNION执行多个 Select ,所有操作都采用如下方式:
select label, groupid, min(duedate), sum(amount) from my_table where label is not null
group by label, groupid
union all
select label, groupid, duedate, amount from my_table where label is null
如有任何建议,我们将不胜感激.