我的桌子看起来像是:
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中有一个等价物。 有什么建议吗?
答案 0 :(得分: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
);
注意:如果有关系,这个任意选择其中两个。
答案 1 :(得分:0)
试试这个:
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;