gpt4 book ai didi

sql - 返回每个组的前 N ​​行 (Vertica/vsql)

转载 作者:行者123 更新时间:2023-12-04 14:13:43 24 4
gpt4 key购买 nike

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

关于sql - 返回每个组的前 N ​​行 (Vertica/vsql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20479626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com