mysql分组后取前几条数据

时间:2022-08-16 15:12:14

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