【问题标题】:ORDER BY with zero values ordered differentlyORDER BY 零值排序不同
【发布时间】:2018-05-02 10:32:30
【问题描述】:

我想添加一个名为 RowNum 的临时列(我已成功获取它)。 但我的问题是我希望我的数据在“Moyenne”列的末尾以零值排序 > 或

     SELECT 
         (SELECT COUNT(*) FROM orieps AS t2 
    WHERE (t2.Nbparcours > t1.Nbparcours ) 
    OR (t2.Nbparcours = t1.Nbparcours AND t2.Nberreurs < t1.Nberreurs  ) 
    OR (t2.Nbparcours = t1.Nbparcours AND t2.Nberreurs = t1.Nberreurs AND t2.Moyenne < t1.Moyenne  ) ) +1 
AS rowNum, Nom, Nbparcours, Nberreurs, Moyenne, Total , P1, P2, P3, P4, P5 
FROM  orieps t1 
    ORDER BY  RowNum ASC 

这是我的桌子:

   Nbparcours|Nberreurs|Moyenne
        1    |    1    |   0
        1    |    1    |  3.5
        2    |    1    |   3

这就是我想要的:

 ROwNum|Nbparcours|Nberreurs|Moyenne
    1  |    2     |    1    |   3
    2  |    1     |    1    |  3.5
    3  |    1     |    1    |   0

首先由 Nbparcours 订购,如果相等,则由 Nberreurs 订购,如果相等,则由 Moyenne 订购,但最后是 0。

【问题讨论】:

    标签: sqlite select sql-order-by


    【解决方案1】:

    您希望值 0 表现得好像它是一个大数字。

    所以替换

    ... AND t2.Moyenne < t1.Moyenne
    

    使用CASE expressions 将0 映射到不同的值:

    ... AND CASE t2.Moyenne WHEN 0 THEN 'last' ELSE t2.Moyenne END
          < CASE t1.Moyenne WHEN 0 THEN 'last' ELSE t1.Moyenne END
    

    (在 SQLite 中,数字比较小于任何字符串。)

    【讨论】:

    • 你是个天才!!谢谢!!我不知道 CASE(我是 Sqlite 的初学者)它工作得很好!再次感谢
    猜你喜欢
    • 2022-01-03
    • 2020-06-03
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    相关资源
    最近更新 更多