【发布时间】:2016-09-14 14:16:27
【问题描述】:
对于像下面这样的表需要进行聚合,以便对于一列中的每个唯一字段,需要找到另一列中离散值的出现次数
输入表是:
id model datetime driver distance
---|-----|------------|--------|---------
1 | S | 04/03/2009 | john | 399
2 | X | 04/03/2009 | juliet | 244
3 | 3 | 04/03/2009 | borat | 555
4 | 3 | 03/03/2009 | john | 300
5 | X | 03/03/2009 | juliet | 200
6 | X | 03/03/2009 | borat | 500
7 | S | 24/12/2008 | borat | 600
8 | X | 01/01/2009 | borat | 700
需要输出
model john juliet | borat
-----|--------|-------|------
S | 1 | 0 | 1
X | 0 | 2 | 2
3 | 1 | 0 | 1
一种可能的方法是按model 进行分组,聚合如下
SUM (CASE WHEN driver = 'value' THEN 1 ELSE 0 END) AS value 用于 driver 列的每个离散值。但挑战有时是离散值的数量太多(在我的情况下约为 50),或者在某些情况下甚至不知道所有可能的离散值 - 我想知道是否有其他方法可以做到这一点。
【问题讨论】:
-
首先进行聚合,然后进行枢轴
标签: sql postgresql pivot crosstab