为最多两个变量排序mysql表

时间:2011-07-26 06:55:28

标签: php mysql sql-order-by max

希望有人可以帮我解决这个问题。

我有一个包含两列的表,我想从该表中选择项目,并根据这两个值中哪一个更高来对它们进行排序。

假设我有列'x'和'y',我有这些条目:

     x ;  y
1.- 10 ; 12
2.-  5 ; 10
3.- 11 ; 20

我希望订购回复:3,1,2

我知道这不会有帮助,因为它在mysql中没有任何意义,但是表达了我的想法

$query = (mysql_query("SELECT * FROM productos ORDER BY MAX(x, y)"));

我不想在表中为此查询创建一个新变量。

有什么想法吗?非常感谢

3 个答案:

答案 0 :(得分:5)

你想在x或y之后对它进行排序,具体取决于哪个更高?

SELECT * FROM products ORDER BY GREATEST(x, y)

但在你的情况下,这是3,2,1因为15(y)高于-5(x)并且还高于第1行中的最大值。所以我有点困惑。


支持NULL并纠正顺序:

SELECT * FROM products ORDER BY GREATEST(COALESCE(x, 0), COALESCE(y, 0)) DESC

如果您需要其他值作为默认值而不是0,只需将其替换即可。

答案 1 :(得分:2)

Select 
  * 
from 
  products
order by
  Case when x>y then x else y end DESC

答案 2 :(得分:2)

SELECT * 
FROM products 
ORDER BY GREATEST(x,y) DESC
       , LEAST(x,y) DESC

排序的第二部分(最少)是在(12,20)的行前加(10,20)行。


由于这两个字段可以有NULL

SELECT * 
FROM products 
ORDER BY GREATEST( COALESCE(x,0), COALESCE(y,0) ) DESC
       , LEAST(    COALESCE(x,0), COALESCE(y,0) ) DESC ;
相关问题