Postgres GROUP BY中唯一值的计数

时间:2015-02-26 20:45:07

标签: sql postgresql pandas

我有一个架构表:

uid | day | type

pandas中,它看起来像这样:

d=pd.DataFrame(columns=['uid','day','type'])
d.loc[0]=[1,1,'C']
d.loc[1]=[1,1,'T']
d.loc[2]=[1,1,'C']
d.loc[3]=[2,1,'T']
d.loc[4]=[1,2,'T']

我想:

  • GROUP BY uidday
  • 获取每组唯一type值的计数。
  • 每组返回前3个type值。

pandas中,可以获得每组唯一值的计数:

d.groupby(['uid','day']).type.value_counts()

输出(然后我会过滤以获得每组前3名)。

uid  day   
1    1    C    2
          T    1
     2    T    1
2    1    T    1

如何在postgres中完成此查询?

1 个答案:

答案 0 :(得分:1)

我不确定完全理解你的问题,但由于我不能发表评论,我只是试一试。

假设我们有表t包含这些数据:

 uid | day | type 
-----+-----+------
   1 |   1 | C
   1 |   1 | T
   1 |   1 | C
   2 |   1 | T
   1 |   2 | T

然后此查询将返回您想要的内容:

  SELECT uid, day, type, count(type) 
  FROM t 
  GROUP BY uid, day, type;

 uid | day | type | type_count 
-----+-----+------+------------
   1 |   1 | C    |     2
   1 |   2 | T    |     1
   1 |   1 | T    |     1
   2 |   1 | T    |     1

然后,您可以使用LIMIT 3在列type_count上创建ORDER BY DESC,然后获得前三名。

我希望这就是你要找的东西。