【问题标题】:Sort by multiple columns MySQL按多列 MySQL 排序
【发布时间】:2018-03-12 17:18:54
【问题描述】:

我有一个表,其中包含三个数据类型为 INT、INT 和 INT 的字段。

我想使用所有这三列对我的选择查询进行排序。如果字段 A

SELECT * FROM table1 WHERE id=uid     
ORDER BY 
    CASE table1.field1
        WHEN table1.field1 < 11 THEN table1.field1
        END
    ASC, 
table1.field2 DESC,
table1.field3 ASC;

+------+--------+---------+
|field1| field2 | field3  |
+------+--------+---------+
|   1  |    4   |    1    |
+------+--------+---------+
|   2  |    3   |    2    |
+------+--------+---------+
|   9  |    2   |    4    |
+------+--------+---------+
|  10  |    1   |    7    |
+------+--------+---------+

由于某种原因,CASE 并没有真正工作,如果我排除它工作但确实按 ASC 顺序对所有 field1 进行排序,而我只想要第 10 个。

【问题讨论】:

    标签: mysql sql sorting sql-order-by


    【解决方案1】:

    table1.field1 之前不需要WHEN

    SELECT * 
    FROM table1 
    WHERE id = uid     
    ORDER BY CASE WHEN table1.field1 < 11 THEN table1.field1 END ASC, 
      table1.field2 DESC,
      table1.field3 ASC;
    

    解释:

    CASE table1.field1
         WHEN table1.field1 < 11 THEN table1.field1
    END       -- this evaluates to true/false (1 and 0)
    
    =>
    CASE table1.field1 WHEN 1 THEN table1.field1 END
    

    【讨论】:

    • 虽然现在的顺序是正确的,但出于某种原因,这 10 行按应有的顺序排列,但似乎是我得到的最后 10 行,而不是前 10 行。
    • @JohnJames while I only want the 10 first. 看起来你需要LIMIT 10。如果不是,那么您的问题可能是每组 n 值,所以我建议用 rextester.com 样本数据和所需的结果集提出另一个问题。
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 2012-09-13
    • 2016-05-12
    • 2016-07-19
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多