oracle 里面有rank() over()函数可以解决对分组后的每组数据进行排序的问题,mysql里面没有类似的函数,可以用行内变量实现。
以下sql为取分组后每组的前两条数据:
SELECT
SITE_ID, TOTAL_COUNT, RANK
FROM
(
SELECT
SITE_ID
@rownum :=@rownum + 1 ROWNUM,
IF (@groupkey = SITE_ID, @rank :=@rank + 1, @rank := 1) AS RANK,
@groupkey := SITE_ID GROUPKEY
FROM
(
SELECT
SITE_ID
FROM
tab_review_area a
) t1,
(SELECT @rownum := 0, @groupkey := NULL ,@rank := 0) t2
) t3
WHERE
RANK <= 2
本文介绍了一种使用行内变量在MySQL中实现Oracle rank() over()函数的功能,以获取分组后每组的前两条数据。通过嵌套查询和变量赋值,实现高效的数据筛选。
3180

被折叠的 条评论
为什么被折叠?



