SQL:将汇总数据组织成两列

Posted

技术标签:

【中文标题】SQL:将汇总数据组织成两列【英文标题】:SQL: Organizing summed data into two columns 【发布时间】:2015-04-16 21:08:32 【问题描述】:

假设我有一个如下数据集:

DATE        PAGE_ID  HITS
2014-1-1    1        100
2014-1-1    2        50
2014-1-1    3        20
2014-1-2    1        20
2014-1-2    2        40
2014-1-2    3        20

我目前可以使用:

SELECT date, hits
FROM my_table
WHERE PAGE_ID = 1
GROUP BY date
ORDER BY date ASC

获取 1 个 page_id 的每日统计信息。

但我如何才能获得页面的日期聚合,但在不同的列中?像这样:

DATE        Page_1_hits   All_other_pages
2014-1-1    100             70
2014-1-2    20              60

【问题讨论】:

【参考方案1】:

对于当前的 Postgres 版本 (9.4)

select date, 
       sum(hits) filter (where page_id = 1) as page_1_hits,
       sum(hits) filter (where page_id <> 1) as all_other_pages
from my_table
group by date
order by date asc;

对于早期版本,您需要使用case

select date, 
       sum(case when page_id = 1 then hits end) as page_1_hits,
       sum(case when page_id <> 1 then hits end) as all_other_pages
from my_table
group by date
order by date asc;

【讨论】:

。 .你知道使用filter 子句有什么好处吗?是否在某些未来版本的 ANSI SQL 中? 顺便说一句,上面有一个错字,应该说“当命中结束”而不是“母鸡命中结束” @GordonLinoff:这不是“未来”的 SQL 标准。那是我认为是在 SQL:2003 标准中引入的 current SQL 标准。我认为在“记录”您的意图方面更清楚一些。至少在这篇博文中它似乎也更快:cybertec.at/postgresql-9-4-aggregation-filters-they-do-pay-off @a_horse_with_no_name 。 . .谢谢你。这就是我问的原因。

以上是关于SQL:将汇总数据组织成两列的主要内容,如果未能解决你的问题,请参考以下文章

将熊猫数据框按两列分组而不汇总

sql查询中,如何将某列 分成 两列。

怎样将树结构数据组织成json数据,页面通过jquery.tree.js解析json来展现树,求大体思路

如何在 Swift 中最好地将对象组织成月份和年份?

UNIX 文件管理

使用 PHP 将多个 SQL 列组合成 HTML 表的单个列