2013-09-24 188 views
3

我有一个6列的表,都是tinyint和1位数。 我需要一个查询来返回每列中排序(排序)desc的数据。mysql多列排序顺序

例如:

col1 col2 col3 
    1  2  5 
    1  7  3 
    2  3  7 

预期的结果:

2  7  7 
    1  3  5 
    1  2  3 

我试图以通过COL1,COL2 DESC但它仅影响第一列(也许是因为它从同一个表的?) THX , Danny

+1

原始数据中没有这样的值为2,7,7的行。 – Randy

+3

不可能。 '订单'是按行计算的。例如'a,b,c'的顺序。只有当'a'中的多行具有相同的值时,它才开始按'b'排序,然后在遇到多个b值时才从'c'开始。 'order by'不会重新排列值,以便它们改变它们所在的行。 –

+0

so Randy ...你有什么建议? –

回答

1

我假设你从同一个表中获取数据,这是什么原因导致你的问题,因为当说到orderby时,db引擎假定行数据是一致的并且不应该被拆分,所以它只能用第一个选择器命令,在你的情况下,它是col1。 解决方案是,通过自己的方式获取每个列,然后在单独的查询中进行排序,然后获得结果。 所以,你最终会在这样做的简单的方法,有三个疑问:

select col1 from table orderby col1 desc;

select col2 from table orderby col2 desc; 

+0

这就是我认为....该死的:( –

+0

放轻松,更糟糕的事情是小的:D –

2

也许是这样的:

select col1, col2, col3 
from 
(select row_number() r, col1 from mytab order by col1 desc) a, 
(select row_number() r, col2 from mytab order by col2 desc) b, 
(select row_number() r, col3 from mytab order by col3 desc) c 
where a.r = b.r 
and a.r = c.r 
+0

row_number是什么意思...? –

+0

是的 - 在Oracle中的rownum ...实际上不完全确定mysql中的语法 - 但编辑答案。 – Randy

+0

我没有得到它...没有这样的列row_number +功能row_number不存在 –

0

在查询中,您可以使用多个订单。但是你不能得到预期的结果。因为mysql将根据其偏好进行排序。即,mysql从左到右排列列。 假设你的查询是这样的:

select * from table order by col1 asc, col2 desc

其中mysql首先按升序排序col1,并显示结果。然后按降序排列col2。所以第二顺序的结果显示不正确。它仅根据结果的顺序显示。最后你不能像你期望的那样得到答案。