よく知られている質問ですが、Verticaがあります。各tag_idの合計(imps)に基づいて上位5つのgeo_country行を返したいとします。Return各グループ(Vertica/vsql)のN個の行
SELECT tag_id,
geo_country,
SUM(imps) AS imps,
RANK() OVER (PARTITION BY tag_id ORDER BY SUM(imps) DESC) AS rank
FROM table1
WHERE tag_id IN (2013150,1981153)
AND ymd > CURRENT_DATE - 3
GROUP BY 1,
2 LIMIT 10;
これは、実際にはWHERE句(2013150)の最初のタグから行のみを返します。私は、他のタグは結果にそれを含めることが十分に高いサム(imps)値を持っていることを知っている。
また、Top Nの部分を実装するにはどうすればよいですか? OVER関数内にLIMIT節を追加しようとしましたが、受け入れられたパラメータのようには見えません。
これは私が毎回使うパターンですが、何らかの理由でそれほど満足できません。私は分析的な質問のためにHAVINGに類似した何かがあったと思いますか? – kimbo305
質問を完了するためにあなたの答えを受け入れることを検討してください。 – Kermit
@ kimbo305これは、アナリティッククエリがどのように機能するのか、SQL標準に従うのかということではありません。 – Kermit