微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回每组的前N行(Vertica / vsql)

熟悉的问题,但与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;

原文地址:https://www.jb51.cc/mssql/74988.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐