2017-08-09 99 views
2

我有一张表,其中包含所有国家名称以及金额字段的列表。我需要的是在上升的名字以显示与量,在顶部为了不等于0的国名,然后用电量的值显示该国0.1以非空值先显示结果然后用空值显示结果

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 

回答

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

向上投票。结果是正确的。 – Learning

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 
+0

这将通过量订单,但我根据由他想要的结果线程启动给定输出相信通过与量> 0名称进行排序,并把那些在底部0量。 – Learning

0

我认为MySQL的对待0作为空。通常,null总是返回false,所以不是检查值是否为0,而是检查它是否为空。所以SELECT * FROM国家,量不名ASC UNION ALL SELECT * FROM国家,金额为空

0

也许你正在寻找的东西像空的订单?

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