2013-09-24 233 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。所以第二順序的結果顯示不正確。它僅根據結果的順序顯示。最後你不能像你期望的那樣得到答案。