代码之家  ›  专栏  ›  技术社区  ›  Roland Rabien

Using MySql, can I sort a column but have 0 come last?

  •  39
  • Roland Rabien  · 技术社区  · 15 年前

    我想按一列int升序排序,但我希望0排在最后。在MySQL中是否有这样的操作?

    3 回复  |  直到 9 年前
        1
  •  93
  •   Daniel Vassallo    15 年前

    您可能想尝试以下方法:

    SELECT * FROM your_table ORDER BY your_field = 0, your_field;
    

    测试用例:

    CREATE TABLE list (a int);
    
    INSERT INTO list VALUES (0);
    INSERT INTO list VALUES (0);
    INSERT INTO list VALUES (0);
    INSERT INTO list VALUES (1);
    INSERT INTO list VALUES (2);
    INSERT INTO list VALUES (3);
    INSERT INTO list VALUES (4);
    INSERT INTO list VALUES (5);
    

    结果:

    SELECT * FROM list ORDER BY a = 0, a;
    
    +------+
    | a    |
    +------+
    |    1 |
    |    2 |
    |    3 |
    |    4 |
    |    5 |
    |    0 |
    |    0 |
    |    0 |
    +------+
    8 rows in set (0.00 sec)
    
        2
  •  2
  •   perfectio    9 年前

    你可以做到以下几点:

    SELECT value, IF (value = 0, NULL, value) as sort_order
    FROM table
    ORDER BY sort_order DESC
    

    空值将在列表的下方。

        3
  •  0
  •   SRKX    15 年前

    下面的查询应该能起到作用。

    (SELECT * FROM table WHERE num!=0 ORDER BY num) UNION (SELECT * FROM table WHERE num=0)