如果我理解正確的,你需要的是這樣的:
with requests (user_id, request_id, category) as (
select 1, 111, 'A' union all
select 1, 111, 'A' union all
select 2, 111, 'A' union all
select 2, 111, 'B' union all
select 1, 111, 'B' union all
select 3, 111, 'B' union all
select 1, 111, 'B' union all
select 1, 111, 'C'
)
-- Below is actual query:
select user_id, COUNT(request_id) AS total
from (
select t.*, rank() over(order by cnt desc) as rnk from (
select requests.*, count(*) over(partition by category) as cnt from requests
) t
) tt
where rnk = 1
group by user_id
order by total desc
limit 5
這裏user_id
和COUNT(request_id)
只計算爲'B'
類,因爲它是最常見的這個例子。
另請注意,如果存在多個最常見的類別,則該查詢會生成所有這些類別的結果。
如果數據是多模式的,您想要做什麼,即有兩個或多個「最常見」值? –