sql - 聚合 postgres 联合结果

标签 sql postgresql

我正在尝试使用 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/

相关文章:

sql - 带有错误输入词的全文搜索sql server

sql - 在sql server中查找表中每个日期的中位数

sql - SQL 中的 IN 运算符 (PostgreSQL)

postgresql - 我可以配置一个表,使插入的行始终具有更大的主键吗

php - 通过 MySQL 获取最少随机记录集

mysql - key mysql 的重复条目

postgresql - Postgres - 推荐具有逆向工程功能的免费可视化建模工具

Javascript 'number' 和 postgres 类型

postgresql - 将 json 字符串从 spring 应用程序插入到 postgres jsonb

sql - 如何在 PostgreSQL 中从右边抓取