SQL-按分组中的一列进行限制
在尝试进行一个查询时,我根据每个指定标记花费的时间_,得出了前1000篇文章,我提出了以下查询,其中1、2、3是指定的标记:SQL-按分组中的一列进行限制,sql,hiveql,Sql,Hiveql,在尝试进行一个查询时,我根据每个指定标记花费的时间_,得出了前1000篇文章,我提出了以下查询,其中1、2、3是指定的标记: SELECT g.tagid, e.post_id, SUM(e.time_spent) AS time FROM post_table e JOIN (SELECT g.postid, g.tagid FROM tags_table g WHERE g.tagid IN (1, 2, 3)) g O
SELECT g.tagid, e.post_id, SUM(e.time_spent) AS time
FROM post_table e
JOIN (SELECT g.postid, g.tagid
FROM tags_table g
WHERE g.tagid IN (1, 2, 3)) g
ON e.post_id = g.postid
WHERE dt >= '2018-06-01'
GROUP BY g.tagid, e.post_id
ORDER BY time DESC
LIMIT 1000
然而,这里使用限制1000的问题是,它限制了整个组,因此我总共只获得1000个结果,而不是为标记1、标记2和标记3中的每个获得1000个结果,即总共3000个结果
如何修改此查询,使限制仅出现在GROUP BY的e.post_id组件上?或者,是否有另一种方法可以为in子句中指定的每个标记获得1000个结果?使用行编号:
SELECT ge.*
FROM (SELECT g.tagid, e.post_id, SUM(e.time_spent) AS time,
ROW_NUMBER() OVER (PARTITION BY g.tagid ORDER BY SUM(e.time_spent) ) as seqnum
FROM post_table e JOIN
tags_table g
ON e.post_id = g.postid
WHERE g.tagid IN (1, 2, 3) AND dt >= '2018-06-01'
GROUP BY g.tagid, e.post_id
) ge
WHERE seqnum <= 1000
ORDER BY t.tagid, time DESC