我有一张桌子,上面有几列。我对“数字”列进行了排序。但是,更困难的部分发生了,我想基于第一列对“ Letter”和“ id”列进行次级排序。 “名称”列仅在“ id”列之后,而不进行排序。
我尝试了几种不同的查询,包括ORDER BY number, letter, id
,但是显然这相对于'Letter'列对'id'列进行了排序,这不是我想要的。我还搜索了其他可能有助于我对两个独立列进行排序的SQL子句,但到目前为止,大多数答案都使用ORDER BY
关键字。
最终结果应如下所示:
“ Letter”和“ id”相对于第一列(“ number”)相对独立地作为次要排序,而“ name”紧跟在“ id”列之后。
有人可能说ORDER BY number, letter, id
有用,但是实际上每个列都是根据先前的排序列而不是第一列进行排序的。如果使用该命令,这就是结果。
答案 0 :(得分:1)
您可以:
order by number, id
答案 1 :(得分:0)
您正尝试在列中而不是在行中对值进行排序。那很奇怪,但是可以用SQL完成。这个想法是枚举每列中的有序值,然后将它们连接在一起:
select tn.number, tn.letter, ti.id, ti.name
from (select t.*, (@rnl := @rnl + 1) as rn
from (select t.* from t order by t.number, t.letter
) t cross join
(select @rnl := 0) params
) tn join
(select t.*, (@rni := @rni + 1) as rn
from (select t.* from t order by t.number, t.id
) t cross join
(select @rni := 0) params
) ti
on tn.rn = ti.rn
order by tn.rn;
我们可以枚举整个表(即不考虑number
)。子查询首先按number
进行排序,因此给定rn
的{{1}}值将始终在同一范围内。