分组依据和排序后的Mysql行编号

时间:2016-07-16 23:54:23

标签: mysql group-by

我要做的是从查询中对行进行编号,以便知道它将显示在哪个页面上。

我的查询类似于下面的查询。我的期望是查询返回的行的顺序与它们编号的顺序相同 - 即row_num将在结果集中很好地递增。

问题在于GROUP BY导致2-3行最终无序(删除了GROUP BY个语句,所有编号都按顺序排列。)

我的实际查询还有更多的表连接等等,但我希望这种简化能让人们轻松解释GROUP BY会导致我遇到的问题 - 更重要的是,如何在完成所有分组和排序后应用行编号。

提前致谢。

SELECT g2.*, @rownum := @rownum + 1 AS row_num
    FROM (SELECT g.gemid as gemid, g.tab, rt.sum_rating as sum_rating
            FROM gems g
            LEFT JOIN (
                SELECT gemid, SUM(rating) as sum_rating 
                    FROM gemrating GROUP BY gemid) rt ON g.gemid = rt.gemid
            WHERE g.tab=0 GROUP BY g.gemid) g2
    LEFT JOIN gempage gp ON g2.gemid = gp.gemid
    JOIN (SELECT @rownum := 0) Z
    WHERE g2.tab=0 ORDER BY sort asc

0 个答案:

没有答案