2017-10-11 7 views
0

Ich versuche, diese Abfrage in Postgresql auszuführen. Ich bekomme die gewünschten Ergebnisse, aber ich versuche, die Ergebnisse auf einen Wert in einer Spalte zu beschränken. Allerdings ist es nicht lassen Sie mich die Spalte zugreifen:Wie greife ich auf den Rang

select count(event), event, u.userid, u.campaign_id, 
rank() over (partition by u.campaign_id order by count(event) desc) as THISHERE 
from events e join users u on u.userid = e.userid 
where THISHERE=1 
group by event, 3 , 4 
order by 1 desc 
limit 20; 

ERROR: Spalte "thishere" existiert nicht

+0

können Sie keine Spalte alias ('thishere') in dem claus Referenz e derselben Abfrage. Deshalb hat es nicht funktioniert. Verwenden Sie stattdessen eine Unterabfrage, die dann den Zugriff auf diesen Spaltenalias ermöglicht. * auch * wenn Sie wirklich nur 1 Reihe für jede Gruppe erwarten, verwenden Sie ROW_NUMBER() anstelle von RANK(), da letzterer Zahlen wiederholen kann (mehr als 1 Sache kann denselben Rang haben) –

Antwort

0

Sie benötigen eine Unterabfrage verwenden:

select eu.* 
from (select count(event), event, u.userid, u.campaign_id, 
      rank() over (partition by u.campaign_id order by count(event) desc) as THISHERE 
     from events e join 
      users u 
      on u.userid = e.userid 
     group by event, 3 , 4 
    ) eu 
where THISHERE = 1 
order by 1 desc 
limit 20; 

Ich denke, man kann auch tun, was Sie distinct on mit wollen:

select distinct on (campaign_id) count(event), event, u.userid, u.campaign_id, 
      rank() over (partition by u.campaign_id order by count(event) desc) as THISHERE 
from events e join 
    users u 
    on u.userid = e.userid 
group by event, 3 , 4 
order by campaign_id, count(event) desc 
fetch first 20 rows only; 
+0

thanks! ich habe das distinct an versucht, aber die syntax ergibt für mich keinen sinn - die postgres docs machen keinen guten job. Würde es Ihnen etwas ausmachen zu erklären, wie es mit Dummy Vars funktioniert? – eatkimchi

Verwandte Themen