我有一个架构表:
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
uid
和day
。type
值的计数。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
中完成此查询?
答案 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,然后获得前三名。
我希望这就是你要找的东西。