首先使用非空值显示结果,然后使用空值

时间:2017-08-09 02:29:32

标签: mysql sql

我有一张表格,其中列出了所有国家/地区名称以及金额字段。我需要的是按名称的升序显示金额不等于0的国家名称,然后显示金额为0的国家/地区。

Name          Amount
Afghanistan    0
Argentina      0
China          0.1
Crotia         0
Hongkong       0.08
India          0.2
Singapore      0.007
Taiwan         0.22

必需输出:

Name          Amount
China          0.1
Hongkong       0.08
India          0.2
Singapore      0.007
Taiwan         0.22
Afghanistan    0
Argentina      0
Crotia         0

到目前为止,我已经尝试过,但它无效。

select * from countries where amount !=0 ORDER by name ASC 
UNION ALL
SELECT * from countries where amount == 0 ORDER BY name ASC

4 个答案:

答案 0 :(得分:2)

您可以通过自定义CASE表达式订购:

SELECT *
FROM countries
ORDER BY
    CASE WHEN amount > 0 THEN 0 ELSE 1 END,    -- places zeroes last
    amount                                     -- then order by the amount

答案 1 :(得分:2)

SELECT *
  FROM countries
  ORDER BY (Amount=0), Name

答案 2 :(得分:0)

我认为mysql将0视为null。通常null总是在任何比较时返回false,因此不检查值是否为0,而是检查它是否为null。因此,请选择*来自金额不是空的国家/地区名称asc union all from * from amount is null

答案 3 :(得分:0)

也许您正在寻找类似的东西?

SELECT * FROM countries 
ORDER BY 
CONCAT(CASE amount WHEN 0 THEN "Z" ELSE "A" END,`name`) asc;