如何在mysql中的两列上获得order的结果

时间:2014-08-15 11:59:17

标签: mysql

我有一张包含以下数据的表

tab1
POS     NAME    DATE
1       abc   08-08-2014
2       def   08-08-2014
1       xyz   14-08-2014
2       mno   14-08-2014
3       pqr   08-08-2014
10      tuv   08-08-2014

现在我想要的结果如下:

POS     NAME DATE
1       xyz 14-08-2014
2       mno 14-08-2014
1       abc 08-08-2014
2       def 08-08-2014
3       pqr 08-08-2014
10      tuv   08-08-2014
2       rns  08-08-2014

我的逻辑是显示所有记录ORDER按日期IN DESC顺序和POS按ASC顺序

但是,如果我使用SELECT DISTINCT * FROM tab1 ORDER BY DATE DESC运行查询,POS ASC

然后显示以下结果集:

POS     NAME DATE
1       xyz  14-08-2014
2       mno  14-08-2014
1       abc  08-08-2014
10      tuv  08-08-2014
2       def  08-08-2014
2       rns  08-08-2014
3       pqr  08-08-2014

2 个答案:

答案 0 :(得分:3)

通常

SELECT * FROM tab1 ORDER BY `DATE` DESC, `POS` ASC

做你想做的事。

但是,由于您的POS列是字符串(char或varchar),您必须将其强制转换为数字:

SELECT * FROM tab1 ORDER BY `DATE` DESC, (`POS`+0) ASC
SELECT * FROM tab1 ORDER BY `DATE` DESC, CAST(`POS` AS INT) ASC

这将导致列转换为所有行中的数字,从而导致更糟糕的"性能。您应该考虑将POS存储为数字(整数)。

答案 1 :(得分:1)

试试这个:

Select 
*
from 
myTable 

order by `date` desc, CAST(POS AS INT)

由于ASC是默认的,所以在我的回答中没有提及