gpt4 book ai didi

sql - 聚合 postgres 联合结果

转载 作者:行者123 更新时间:2023-11-29 12:58:36 26 4
gpt4 key购买 nike

我正在尝试使用 postgres 数据库中的单个表在 SQL 中获取每个日期的单个结果行。我尝试使用 Union,但我认为这不是正确的方法。有人能帮我构造正确的 SQL 吗。

表内容的示例数据列:id、creationdate、contenttype

1 |2016-04-02|PAGE
2 |2016-04-02|ATTACHMENT
3 |2016-04-02|PAGE
4 |2016-04-03|ATTACHMENT
5 |2016-04-03|PAGE
6 |2016-04-03|ATTACHMENT
7 |2016-04-03|PAGE
8 |2016-04-04|ATTACHMENT
9 |2016-04-04|ATTACHMENT
10|2016-04-04|ATTACHMENT

如果使用这个 SQL 查询:

SELECT 
date(creationdate) AS create_date,
COUNT(*) AS PAGE,0 AS ATTACHMENT
FROM
content
WHERE
contenttype='PAGE' GROUP BY content.creationdate
UNION
SELECT
date(creationdate) AS create_date,
0 AS PAGE,COUNT(*) AS ATTACHMENT
FROM
content
WHERE
contenttype='ATTACHMENT' GROUP BY content.creationdate
ORDER BY create_date ASC;

我得到了结果

|create_date|PAGE|ATTACHMENT|
|2016-04-02|0|2|
|2016-04-02|1|0|
|2016-04-03|0|2|
|2016-04-03|1|0|
|2016-04-04|3|0|

我想要的是:

|create_date|PAGE|ATTACHMENT|
|2016-04-02|1|2|
|2016-04-03|2|2|
|2016-04-04|3|0|

最佳答案

您可以通过仅从表中选择一次来使用条件聚合来完成此操作:

SELECT date(creationdate) AS create_date,
count(CASE WHEN contenttype='PAGE' then 1 end) as PAGE,
count(CASE WHEN contenttype='ATTACHMENT' then 1 end) as ATTACHMENT
FROM
content
GROUP BY content.creationdate
ORDER BY create_date ASC;

关于sql - 聚合 postgres 联合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com