返回每组的前N行(Vertica / vsql)
发布时间:2020-12-12 08:53:16 所属栏目:MsSql教程 来源:网络整理
导读:熟悉的问题,但与Vertica.我想基于每个tag_id的sum(imps)返回前5个geo_country行.这是我开始的查询: SELECT tag_id,geo_country,SUM(imps) AS imps,RANK() OVER (PARTITION BY tag_id ORDER BY SUM(imps) DESC) AS rankFROM table1WHERE tag_id IN (2013150,1
熟悉的问题,但与Vertica.我想基于每个tag_id的sum(imps)返回前5个geo_country行.这是我开始的查询:
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)中第一个标记的行.我知道另一个标签的sum(imps)值足够高,应该在结果中包含它. 另外,我如何实现前N部分?我尝试在OVER函数中添加LIMIT子句,但它看起来不像是一个可接受的参数. 解决方法解决了.解决方案是将查询转换为子查询,然后使用WHERE子句按等级进行筛选:SELECT * FROM (SELECT tag_id,sum(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) as t2 WHERE t2.rank <=5; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |