2017-10-11 11 views
0

私はPostgreSQLでこのクエリを実行しようとしています。私が望む結果が得られますが、結果を列の値に制限しようとしています。ランクにアクセスするには

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; 

私はあなたができると思う: "thishere" あなたはサブクエリを使用する必要が

+0

ここでは、場所の列エイリアス( 'thishere')を参照することはできません同じ質問のe。それがうまくいかない理由です。代わりにサブクエリを使用して、その列エイリアスへのアクセスを許可します。あなたが文字通り各グループの1行を期待している場合は、RANK()の代わりにROW_NUMBER()を使用します。後者は数字を繰り返すことができます(1つ以上のものが同じランクを持つことができます) –

答えて

0

存在しないカラム:

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:しかし、それは私が列にアクセスすることはできません。 distinct onを使用してください:

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

ありがとう!私は別のものを試してきましたが、構文は私には意味がありません。ポストグルのドキュメントは本当にうまく機能しません。どのようにダミーヴァースで動作するか説明してもらえますか? – eatkimchi

関連する問題