Sqlite 中每个类别的前 n 个计数
Posted
技术标签:
【中文标题】Sqlite 中每个类别的前 n 个计数【英文标题】:Top n Count per category in Sqlite 【发布时间】:2017-06-21 21:20:15 【问题描述】:我有一张桌子看起来像:
user books
a aa
a ab
a ab
a ac
a ac
a ac
b aa
b aa
b aa
b ac
c aa
c aa
c ab
c ab
c ab
我想要一个聚合字段,其中包含每个用户的唯一书籍计数 - 我想按降序显示其中的前 2 个,意思是:
user book count
a ac 3
a ab 2
b aa 3
b ac 1
c ab 3
c aa 2
我正在使用 sqlite。
在 postgres 中,我会让你过度分区,但我认为 sqllite 中没有等价物。 有什么建议吗?
【问题讨论】:
【参考方案1】:这是 SQLite 的一大痛点,因为它既没有变量也没有窗口函数。一种方法是相关子查询:
with ub as (
select user, book, count(*) as cnt
from t
group by user, book
)
select ub.*
from ub
where ub.book in (select ub2.book
from ub ub2
where ub2.user = ub.user
order by cnt desc
limit 2
);
注意:如果有平局,则任意选择其中两个。
【讨论】:
这在插入查询对象时不起作用:github.com/yhat/pandasql【参考方案2】:试试这个:
Select user, book, count(*) cnt
From t a
Where book in (
Select book
From t b
Where a.user = b.user
Group by book
Order by count(*) desc
Limit 2
)
Group by user, book;
【讨论】:
以上是关于Sqlite 中每个类别的前 n 个计数的主要内容,如果未能解决你的问题,请参考以下文章