postgresql - SQL中针对特定数据列的自定义顺序
问题描述
我有一个表格,例如如下:
+-------+------+---------+---------+
| Col1 | col2 | values1 | values2 |
+-------+------+---------+---------+
| item1 | A4 | 5 | 87 |
| item1 | A1 | 5 | 11 |
| item1 | A2 | 5 | 25 |
| item1 | A3 | 5 | 33 |
| item1 | A5 | 0 | 18 |
| item2 | A4 | 12 | 72 |
| item2 | A1 | 6 | 12 |
| item2 | A2 | 6 | 26 |
| item2 | A3 | 6 | 34 |
| item2 | A5 | 6 | 35 |
+-------+------+---------+---------+
我想在特定条件下对上述数据进行排序,例如:按升序排列 values2 的数据where col2=A5 这意味着数据应按正常顺序排序,但 col2= 'A5' 应按 values2 的顺序排列升序或降序应该先出现 它看起来像下面这样。
+-------+------+---------+---------+
| Col1 | col2 | values1 | values2 |
+-------+------+---------+---------+
| item1 | A1 | 5 | 11 |
| item1 | A2 | 5 | 25 |
| item1 | A3 | 5 | 33 |
| item1 | A4 | 5 | 87 |
| item2 | A5 | 6 | 35 |
| item2 | A1 | 6 | 12 |
| item2 | A2 | 6 | 26 |
| item2 | A3 | 6 | 34 |
| item2 | A4 | 12 | 72 |
| item1 | A5 | 0 | 18 |
+-------+------+---------+---------+
col2='A5' 的数据应根据列values2的值 按升序或降序排列。这可以实现吗?
具体来说,我们只接受col2
订购。如果我订购col2
. 这些行将按 A1,A2,A3,A4,A5排序,而不依赖于 col values2
。我在这里要问的是,当列的最大值col2
的行的特定 A5 数据的顺序应该首先出现,然后是降序中的较小值时,A5
values2
在这里,我们假设当我按 col2 订购时。我们有两个 A5 数据。
| item1 | A5 | 0 | 18 |
和
| item2 | A5 | 6 | 35 |
所以第二个值应该排在第一位,因为 column 的值更高values2
。先来并不意味着它应该在顶部,但我的意思是它应该在 A4 之后,但基于values2
col2=A5 的值,较高的应该在 A4 之后。
** 编辑了要求。
解决方案
您可以尝试使用具有ORDER BY
两级排序的子句:
SELECT Col1, col2, values1, values2
FROM yourTable
ORDER BY
CASE WHEN col2 = 'A5' THEN 0 ELSE 1 END,
values2 DESC;
这将首先放置所有记录col2 = 'A5'
,然后是所有其他记录。在这两组中的每一个中,第二个条件按降序排序values2
。
注意:自从我最初回答以来,OP 已经多次更改了他的问题。最初的问题询问如何对记录进行排序,col2 = 'A5'
首先是所有其他记录。
推荐阅读
- python - Python - 暂停直到 1 分钟后再次运行代码
- ios - PJSIP IOS 当我将音频切换到扬声器时,声音变得非常有问题
- javascript - Google 表格脚本,每个函数都与 && 运算符结合并设置值范围以检查数组
- ios - iOS Swift FCM 在没有 p12 文件的情况下无法工作
- mysql - 带有 Liquibase 的 JDBC MySQL url 错误
- javascript - 使用画布进行侧面碰撞检测
- python - 如何从 TensorFlow/OpenCV 对象检测检测到的每个对象触发 JSON 或 pd 数据帧报告
- javascript - 尝试查找元素时没有出现此类元素异常
- excel - Excel VBA减去两个日期以计算整个列中的天数
- html - HTML 斜体和非斜体文本被渲染得太近