如何使用条件对sql查询排序?

ekqde3dh  于 2021-07-27  发布在  Java
关注(0)|答案(4)|浏览(328)

我需要帮助。
我有一张有下一个数据的表

|---id---|-----name-----|--value--|
|    1   |     Alex     |   300   |
|    2   |     John     |   800   |
|    3   |     Mary     |   0     |
|    4   |     Carl     |   100   |
|    5   |     Jesus    |   0     |
|    6   |     Aron     |   0     |

点菜 value ,我正在使用:

SELECT * FROM table ORDER_BY value DESC;

但有时我会得到这样的结果:

|---id---|-----name-----|--value--|
|    2   |     John     |   800   |
|    1   |     Alex     |   300   |
|    4   |     Carl     |   100   |
|    5   |     Jesus    |   0     |
|    3   |     Mary     |   0     |  -- !
|    6   |     Aron     |   0     |

我想用一个条件对表进行排序:“if value is not 0 order by value and if value is 0 order by id”来获得:

|---id---|-----name-----|--value--|
|    2   |     John     |   800   |
|    1   |     Alex     |   300   |
|    4   |     Carl     |   100   |
|    3   |     Mary     |   0     |
|    5   |     Jesus    |   0     |
|    6   |     Aron     |   0     |

我该怎么做?

niwlg2el

niwlg2el1#

如果没有负值(如示例数据中所示),则在 id 足够了:

order by value desc, id
bnlyeluc

bnlyeluc2#

您可以按布尔值排序

SELECT * FROM table
ORDER BY (VALUE<>0)::BOOL DESC, value DESC, ID ASC

这会给你所需要的
…玩三个方向的游戏,你可以随心所欲地重新排序

ddarikpa

ddarikpa3#

SELECT * 
FROM table 
WHERE VALUE<>0
ORDER_BY value DESC,ID

你自己决定要不要加 DESC 在结束时,命令id取消分区。

fcwjkofz

fcwjkofz4#

问题中没有任何一条说价值不能是负的,或者 NULL . 不依赖 0 最后排序:

SELECT *
FROM   tbl
ORDER  BY value = 0, value DESC NULLS LAST, id;

这也是可能的 NULL 最后一个值。这些会排在第一位 DESCENDING 命令(您没有指定如何处理这些文件(如果有的话)
请参见:
将空值排序在所有其他值之后(特殊值除外)
按列asc排序,但先为空值?

相关问题