2017-06-01 3 views
0

Ich versuche, die Funktionen mode() oder most_common_vals() als Unterabfrage-Kriterien zu verwenden.PostgreSQL-Filter, wo Kategorie am häufigsten ist

Allerdings bekomme ich weiterhin einen Fehler bezüglich der Nichtexistenz beider Funktionen.

+0

Was möchten Sie tun, wenn die Daten multimodal sind, d. H. Es gibt zwei oder mehr Werte, die am häufigsten vorkommen? –

Antwort

0

Wenn ich richtig verstehe, müssen Sie etwas wie folgt aus:

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 

Hier user_id und COUNT(request_id) berechnet werden nur für 'B' Kategorie, weil sie am häufigsten in diesem Beispiel ist.

Bitte beachten Sie auch, dass im Falle, dass es mehrere häufigste Kategorien gibt, diese Abfrage das Ergebnis aller dieser Kategorien erzeugt.

Verwandte Themen