我有一个PG数据库表价格。结构如下:Postgres:排序非零ASC加零和NULLS LAST
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
我需要的是非常简单的。我想订购的记录,从而使:
项目升序排列值> 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
哇!我认为这只能通过Switch案例来实现。但是你提供的解决方案是整洁,清晰并且达到标准的!最佳答案 –
它的简洁但不直观,这可能是一个维护问题。如果使用逻辑路标。 –