代码之家  ›  专栏  ›  技术社区  ›  Roalt

用SQL重新排序整数(值0除外)

  •  6
  • Roalt  · 技术社区  · 16 年前

    我正在尝试根据整数值“place”从MySQL数据库表中获取行的有序列表。

    SELECT * FROM mytable
    ORDER BY place;
    

    除了值place=0的所有行都应该出现在表的末尾之外,这可以正常工作。

    如果我的桌子是:

    name place
    ---- -----
    John 1
    Do   2
    Eric 0
    Pete 2
    

    它应该变成:

    name place
    ---- -----
    John 1
    Do   2
    Pete 2
    Eric 0
    
    3 回复  |  直到 16 年前
        1
  •  4
  •   True Soft    16 年前
    SELECT *
    FROM myTable
    ORDER BY place>0 DESC, place
    

    是一个没有 CASE

        2
  •  6
  •   davek    16 年前
    order by case when place = 0 then 1 else 0 end asc, place asc
    

    这样你就可以首先得到所有非零的顺序。

        3
  •  2
  •   mjv    16 年前
    SELECT *
    FROM myTable
    ORDER BY CASE place WHEN 0 THEN 9999 ELSE place END
    

    这种方法意味着我们知道9999(或其他一些值)大于place列中的所有可能值。

    或者,我们可以按以下两个值进行排序:

       ORDER BY CASE place WHEN 0 THEN 0 ELSE -1 END, place