我有一个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
我有一个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
我假设你从同一个表中获取数据,这是什么原因导致你的问题,因为当说到orderby时,db引擎假定行数据是一致的并且不应该被拆分,所以它只能用第一个选择器命令,在你的情况下,它是col1。 解决方案是,通过自己的方式获取每个列,然后在单独的查询中进行排序,然后获得结果。 所以,你最终会在这样做的简单的方法,有三个疑问:
select col1 from table orderby col1 desc;
select col2 from table orderby col2 desc;
等
这就是我认为....该死的:( –
放轻松,更糟糕的事情是小的:D –
也许是这样的:
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
row_number是什么意思...? –
是的 - 在Oracle中的rownum ...实际上不完全确定mysql中的语法 - 但编辑答案。 – Randy
我没有得到它...没有这样的列row_number +功能row_number不存在 –
在查询中,您可以使用多个订单。但是你不能得到预期的结果。因为mysql将根据其偏好进行排序。即,mysql从左到右排列列。 假设你的查询是这样的:select * from table order by col1 asc, col2 desc
其中mysql首先按升序排序col1,并显示结果。然后按降序排列col2。所以第二顺序的结果显示不正确。它仅根据结果的顺序显示。最后你不能像你期望的那样得到答案。
原始数据中没有这样的值为2,7,7的行。 – Randy
不可能。 '订单'是按行计算的。例如'a,b,c'的顺序。只有当'a'中的多行具有相同的值时,它才开始按'b'排序,然后在遇到多个b值时才从'c'开始。 'order by'不会重新排列值,以便它们改变它们所在的行。 –
so Randy ...你有什么建议? –