查询返回基于每个字段的顺序的列表(SQL)

问题描述 投票:0回答:1

我只需要一个表中的一个查询(SQl),它具有多个字段的多个“排序依据”。

我希望查询每个字段的每个“排序依据”以基于表中的数据返回单个列表结果

ex:

name c1 c2
"a" 1   2
"b" 3   4
"c" 2   1
"d" 3   1
"e" 1   4
"f" 3   4
"g" 5   2
"h" 4   4

我想通过一个查询返回一个列表,该列表基于“ c1”和“ c2”(asc)的顺序,如下所示:

"a" 1   2 --> order asc by c1
"e" 1   4
"c" 2   1
"b" 3   4
"d" 3   1
"f" 3   4
"h" 4   4
"g" 5   2
----------

"c" 2   1 ---> order asc by c2
"d" 3   1
"a" 1   2
"g" 5   2
"b" 3   4
"e" 1   4
"f" 3   4
"h" 4   4
sql postgresql ecto
1个回答
2
投票

这是您想要的吗?

select t.*
from t cross join
     (values ('col1'), ('col2')) v(which)
order by v.which,
         (case when which = 'col1' then col1 end) asc,
         (case when which = 'col2' then col2 end) asc;

请注意,出于两个原因,两个单独的查询可能会更快

  1. 排序的标度为O(n * ln(n)),这意味着将要排序的数据加倍会超过排序所需的时间。
  2. 如果您在col1和/或col2上有索引,则该索引可用于排序。使用更复杂的键是不可能的。
© www.soinside.com 2019 - 2024. All rights reserved.