我有一个表格,如下所示:
+-------+------+---------+---------+
| 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 |
+-------+------+---------+---------+
我想在特定条件下对上述数据进行排序,例如:以升序对value2的数据进行排序,其中 col2 = A5 表示数据应该按正常顺序排列,但如果col2 ='A5',则按值2顺序排列的行应递增或递减 如下图所示。
+-------+------+---------+---------+
| 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 |
+-------+------+---------+---------+
应根据列 values2 的值以升序或降序对col2 ='A5'的数据进行排序。能做到吗?
具体地说,让我们仅进行col2
排序。如果我订购col2
。这些行将按 A1,A2,A3,A4,A5 排序,而不依赖于col values2
。我要问的是,col2
A5
行中具有列values2
最大值的| item1 | A5 | 0 | 18 |
的A5数据的顺序应该排在最前面,然后降序较小,
这里假设我按col2订购。我们有两个关于A5的数据。
| item2 | A5 | 6 | 35 |
和
values2
因此,由于列values2
的值较高,因此第二个值应该优先。
首先出现并不意味着它应该在顶部,但是我的意思是它应该在A4之后,但基于col2 = A5的case class CustomID(value: Int) extends MappedTo[Int]
值,更高的应该在A4之后。
**编辑了要求。
答案 0 :(得分:1)
您可以尝试使用具有两级排序的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'
来排序记录,然后是所有其他记录。