我有一個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 ...你有什麼建議? –