我有一张表格,其中列出了所有国家/地区名称以及金额字段。我需要的是按名称的升序显示金额不等于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
答案 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;