sql - 对 2 列求和并合并行
问题描述
主键是reportdate,market,platform
. 如果我得到 2 条或多条记录,我想对 row_num = 1 的impr
andleads
列求和并删除 row_num = 2 (我想出了删除部分,但仍在尝试求和部分)。
如何求和impr
和leads
列以获得所需的输出,如下所示。
这些是我的输入记录:
reportdate market platform impr leads create_date file_id row_num
2020-05-16 TX quote 0.00000 7.00000 2020-06-11 11345 1
2020-05-16 TX quote 600.00000 0.00000 2020-06-11 11345 2
2020-05-16 CA street 50.00000 0.00000 2020-06-11 11345 1
2020-05-16 CA street 0.00000 4.00000 2020-06-11 11345 2
2020-05-16 PA unknown 0.00000 7.00000 2020-06-11 11345 1
2020-05-16 PA unknown 600.00000 0.00000 2020-06-11 99999 2
我想查看记录作为我的输出:
reportdate market platform impr leads create_date file_id row_num
2020-05-16 TX quote 600.00000 7.00000 2020-06-11 11345 1
2020-05-16 CA street 50.00000 4.00000 2020-06-11 11345 1
2020-05-16 PA unknown 0.00000 7.00000 2020-06-11 11345 1
2020-05-16 PA unknown 600.00000 0.00000 2020-06-11 99999 2
解决方案
这是聚合或窗口函数。
对于您当前的数据集,聚合就足够了:
select
reportdate,
market,
platform,
sum(impr) impr,
sum(leads) leads,
create_date,
file_id,
min(row_num) row_num
from mytable
group by
reportdate,
market,
platform,
create_date,
file_id
另一方面,如果您在列中具有不同的值,例如file_id
或create_date
对于给定的(reportdate, market, platform)
元组,那么您将需要使用窗口函数:
select *
from (
select
reportdate,
market,
platform,
sum(impr) over(partition by reportdate, market, platform) impr,
sum(leads) over(partition by reportdate, market, platform) leads,
create_date,
file_id,
row_num,
row_number() over(partition by reportdate, market, platform order by row_num) rn
from mytable
) t
where rn = 1
推荐阅读
- python - 无法从侧面字符串列表中打印特定索引
- python - How do I manually generate an alembic migration script that updates an Enum column
- wordpress - 清漆 Wordpress SSL Apache
- c++ - 如何用颜色打印数组元素
- java - 使用以下条件对字符串数组列表进行排序?
- spring-boot - Spring Data Elasticsearch - 如何返回分数
- google-sheets-api - Sheets API V4 电子表格视图属性
- reporting-services - SSRS 箭头指示器开始和结束
- javafx - 在 TableView 列 JavaFX 中使用 ObservableList 的索引
- html - 网站不能在移动设备上垂直滚动