MySQL:按不同列中的单个值排序

时间:2013-08-13 11:03:56

标签: mysql sorting

我的表看起来像这样(简化):

name  result1  result2  result3 
A       15     17        24
B       30     31        21
C       27     19        39

现在我想在result1,result2和result3列中对结果进行排序,以便我得到按这些列中从最低到最高值排序的排名。

结果应如下所示

name  result
A     15
A     17
C     19
B     21
A     24
C     27
B     30
B     31
C     39

我不知道如何在不同的列中对值进行排序,同时注意每个值,而不仅仅是最大值或最小值。有人能帮助我吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT name,result  FROM
(
SELECT name,  result1 AS result  FROM YourTable
UNION ALL
SELECT name,  result2 AS result  FROM YourTable  
UNION ALL
SELECT name,  result3 AS result  FROM YourTable 
) AS T

ORDER BY result 

答案 1 :(得分:0)

您需要在排序前取消数据。这是一个好方法:

select name,
       (case when n.n = 1 then result1
             when n.n = 2 then result2
             when n.n = 3 then result3
        end) as result
from t cross join
     (select 1 as n union all select 2 union all select 3
     ) n
order by result desc;

我更喜欢这种方法的原因是出于性能原因。使用cross join表示初始表只扫描一次(而不是使用union all多次扫描表)。对于单个小型表,这可能没有什么区别。如果“表”实际上是一个更复杂的查询,性能差异可能很大。