如何对两列(整数和字符串)进行排序?

How to sort two columns (integer and string)?

我有一个 table,其中第一列是整数,第二列是字符串。我想要的是第一列首先按顺序排序,然后当值相同时第二列应该一个接一个地分组。为了模拟我的想法,请参见下文。不确定这是否可能?

对 2 列进行排序

你看到正确的顺序应该如下所示,其中 Seq 是 运行 升序排列,但是当有相同的阶段时,它会在移动到下一个之前选择它下面的列表。所以顺序排列正确,相位分组也正确

[

在两列之后使用关键字 ASCDESC

SELECT * 
FROM table 
  INNER JOIN (
     SELECT phase,max(seq) as k 
     FROM table 
     GROUP BY phase) keytable 
  using (phase) 
ORDER BY k asc, seq asc

修改查询以满足您的需要

你的需求只能这样解决

SELECT * FROM table ORDER BY column1, column2

你不明白的是,如果 column1 先排序,那么 column2 只会以不违反 column1 排序的方式排序

考虑这个 table :

----------------------------------
empid | empname         | salary |
----------------------------------
200   | Johnson         | 10000  |
----------------------------------
400   | Adam            | 12000  |
----------------------------------
300   | Mike            | 11000  |
----------------------------------
100   | Johnson         | 17000  |
----------------------------------
500   | Tomyknoker      | 10000  |
----------------------------------

如果您按 empidempname 排序,则输出将如下所示


empid | empname         | salary |
----------------------------------
100   | Johnson         | 17000  |
----------------------------------
200   | Johnson         | 10000  |
----------------------------------
300   | Mike            | 11000  |
----------------------------------
400   |  Adam           | 12000  |
----------------------------------
500   | Tomyknoker      | 10000  |
----------------------------------

所以在这里,首先,empid 被排序为 100, 200, 300, 400, 500

现在 empid 100 对应 Johnson -> 17000200 对应 Johnson -> 10000 ,所以一旦 empid 被排序,它将尝试排序 empname

明白了吗?

帮助您实现排序目标的 hack,也许您可​​以向 table 添加一个组字段,这样您就可以以更简洁的方式实现您想要的结果。

SELECT * FROM [PlanActual]
ORDER BY Phase, LEFT(Seq,1)

这可能接近您想要的:

SELECT t1.*
FROM PlanActual AS t1
INNER JOIN (
   SELECT MIN(Seq) AS minSeq, Phase
   FROM PlanActual
   GROUP BY Phase    
) AS t2 ON t1.Phase = t2.Phase
ORDER BY t2.minSeq