我有一个PG数据库表价格。结构如下:
id name total_sales created_at
1 A 0.0 2016-01-01
2 B 1.25 2016-01-01
3 C 8.17 2016-01-01
4 D 15.09 2016-01-01
5 E 0.0 2016-01-01
6 F NULL 2016-01-01
7 G 2.25 2016-01-01
8 H 19.34 2016-01-01
9 I 47.91 2016-01-01
10 J 0.0 2016-01-01
11 K NULL 2016-01-01
12 L 0.01 2016-01-01
13 M 5.11 2016-01-01
14 N 27.53 2016-01-01
15 O 3.53 2016-01-01
我需要的是非常简单的。我想订购这样的记录:
值为&gt的商品;在ASCENDING命令中的0.0首先,然后是 项目为0.0,然后是NULLS LAST
简而言之,我需要以下序列中的o / p:
1st: 12 => 0.01
2nd: 2 => 1.25,
3rd: 7 => 2.25,
4th: 15 => 3.53,
5th: 13 => 5.11,
6th: 3 => 8.17,
7th: 4 => 15.09,
8th: 8 => 19.34,
9th: 14 => 27.53,
10th: 9 => 47.91,
11th, 12th, 13th all 0.0
14th, 15th all NULLS
所以,到目前为止,我尝试过以下SQL,但没有一个工作!
SELECT * FROM prices
ORDER BY CASE WHEN total_sales = 0.0 THEN 0 ELSE total_sales END ASC NULLS LAST
答案 0 :(得分:1)
order by total_sales = 0 nulls last, total_sales
false
之前的 true
个订单
答案 1 :(得分:1)
这里有三类值:
这可以用case
表达式表示,您可以使用二级排序按升序对正值进行排序:
SELECT *
FROM prices
ORDER BY CASE WHEN total_sales > 0 THEN 1
WHEN total_sales = 0 THEN 2
WHEN total_sales IS NULL THEN 3 -- Just for readability
END ASC,
total_sales ASC