如何将共享一个相同值的多行折叠成一行 PRESTO SQL
How do I collapse multiple rows that shares one identical value into a single row PRESTO SQL
我有这个table
id
cnt1
cnt2
7775
1
7775
2
我想合并行,这样就可以了
id
cnt1
cnt2
7775
1
2
我试过自连接,但它只将行附加到底部。有任何想法吗?谢谢!
使用SubQuery
和join
如下
SELECT T1.Id,
Cnt1,
Cnt2
FROM (SELECT Id,
Cnt1
FROM Table
WHERE Cnt1 IS NOT NULL) T1
JOIN (SELECT Id,
Cnt2
FROM Table
WHERE Cnt2 IS NOT NULL) T2
ON T1.Id = T2.Id
根据所需的逻辑,您可以将 group by id
与相应的 aggregate function, for example max
(或 sum
)一起使用,这将忽略空值。
-- sample data
WITH dataset (id, cnt1, cnt2) AS (
VALUES (7775, 1, null),
(7775, null, 2)
)
-- query
select id,
max(cnt1) cnt1,
max(cnt2) cnt2
from dataset
group by id
输出:
id
cnt1
cnt2
7775
1
2
我有这个table
id | cnt1 | cnt2 |
---|---|---|
7775 | 1 | |
7775 | 2 |
我想合并行,这样就可以了
id | cnt1 | cnt2 |
---|---|---|
7775 | 1 | 2 |
我试过自连接,但它只将行附加到底部。有任何想法吗?谢谢!
使用SubQuery
和join
如下
SELECT T1.Id,
Cnt1,
Cnt2
FROM (SELECT Id,
Cnt1
FROM Table
WHERE Cnt1 IS NOT NULL) T1
JOIN (SELECT Id,
Cnt2
FROM Table
WHERE Cnt2 IS NOT NULL) T2
ON T1.Id = T2.Id
根据所需的逻辑,您可以将 group by id
与相应的 aggregate function, for example max
(或 sum
)一起使用,这将忽略空值。
-- sample data
WITH dataset (id, cnt1, cnt2) AS (
VALUES (7775, 1, null),
(7775, null, 2)
)
-- query
select id,
max(cnt1) cnt1,
max(cnt2) cnt2
from dataset
group by id
输出:
id | cnt1 | cnt2 |
---|---|---|
7775 | 1 | 2 |