关于mysql获取数据排序order by的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mysql获取数据排序order by的问题相关的知识,希望对你有一定的参考价值。

比如我数据库里的内容
flag为状态,0跟1;finish,完成日期;create,创建日期
id flag sum
1 0 15
2 0 16
3 1 17
4 1 18

要求的排序是:
1,按flag从小到大排;
1,flag为0时,按sum从小到大排;
2,flag为1时,按id从大到小排
也就是上面4条的排序结果是:1,2,4,3

初接触mysql,除基本语句外其他没怎么了解
我写的是:order by finish,sum asc,id desc limit $begin,$num 但这个不行哎。

求指教~~

参考技术A order by finish asc,flag asc,sum asc,id desc

MySQL 获取 ORDER BY 编号错误的行位置

【中文标题】MySQL 获取 ORDER BY 编号错误的行位置【英文标题】:MySQL get row position with ORDER BY incorrectly numbered 【发布时间】:2013-11-01 06:06:54 【问题描述】:

我有以下 mySQL 查询,我想给在计算字段上排序的行以及相应的行位置。我使用了来自here 的 OMG Ponies 代码作为模板,但返回的行编号不正确(它们在没有排序的情况下按键(gemid)顺序编号)。我知道这与 GROUP BY 上的 JOIN 有关,但我知道如何解决它。提前致谢。

SELECT g.gemid, sum_rating, @rownum := @rownum + 1 AS row_num FROM gems g
    LEFT JOIN (SELECT gemid, SUM(rating) as sum_rating from gemrating GROUP BY gemid) rt ON g.gemid = rt.gemid 
    JOIN (SELECT @rownum := 0) Z 
    WHERE g.grade = '8'  
    ORDER BY sum_rating asc

输出应该看起来像:

gemid    sum_rating    row_num
------   ------------  ----------
2           10           1
4           25           2
1           40           3
3           41           4

相反,它又回来了:

gemid    sum_rating    row_num
------   ------------  ----------
2           10           2
4           25           4
1           40           1
3           41           3

【问题讨论】:

您的预期输出是什么?你到底想点什么? 对不起,如果我不清楚。输出按 sum_rating 顺序排序。 row_num 应该从 1 编号到按该顺序排序的任何值。相反,它以自然键顺序编号,因此将 row_num 显示为 4、5、1、6 等。我已更新帖子以显示更好。 【参考方案1】:

看起来这行得通。我知道在给它们编号之前我必须先对记录进行排序,然后从有序列表中选择。

SELECT g2.gemid, g2.sum_rating, @rownum := @rownum + 1 AS row_num FROM 

(SELECT g.gemid, rt.sum_rating, g.grade 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.grade = '8'  ) g2

    JOIN (SELECT @rownum := 0) Z 
    WHERE g2.grade = '8'  
    ORDER BY sum_rating asc

【讨论】:

以上是关于关于mysql获取数据排序order by的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于sql中动态 ORDER BY+CASE WHEN中排序字段类型的问题

MySQL 获取 ORDER BY 编号错误的行位置

MySQL中order by排序时,数据存在null咋办

mysql索引问题,现在关于where条件有status、cate_id、price三个,ORDER BY分别可能likes、hits、id排序

MySQL 'Order By' - 正确排序字母数字

mysql 数据操作 单表查询 查询排序: order by