mySQL语句ORDER BY多列

时间:2012-07-25 05:02:57

标签: php mysql sql sql-order-by

如果我有两列,价格(full_price,sales_price)和这些列中都有数字。我知道sql语句可以按顺序执行多个顺序,但是当这些列中包含值时它是如何工作的?

("SELECT * FROM table ORDER BY full_price,sales_price DESC")

我如何完成所以它将选择两列的最小值?它会根据full_price和sales_price之间选择的列来按顺序放置数据吗?

注意:有时sales_price没有价值。

由于

编辑:

实施例

id    full_price        sales_price
1      23                 42           
2      342                200
3      1
4      10                 8

我要做的是使用这些数字,我可以输出与最低价格相关的数据。

订单应该是:

3,4,1,2

原因:

3: 1
4: 8
1: 23
2: 200

3 个答案:

答案 0 :(得分:4)

假设您的空白sales_price为NULL且full_price不能为NULL:

select ...
from ...
where ...
order by case
    when sales_price is null then full_price
    else least(full_price, sales_price)
end

您可能希望添加辅助排序键,以便从关系中获得一致且明智的结果。

答案 1 :(得分:1)

SELECT * FROM table
ORDER BY case when sales_price is null or full_price is null
              then 0
              when full_price > sales_price
              then sales_price ASC
              else full_price ASC
         end

答案 2 :(得分:0)

如果您想根据full_price和sales_price的差异获得结果,请尝试:

SELECT *
FROM table
ORDER BY ABS(full_price - IF(sales_price IS NULL, 0, sales_price)) ASC

或者如果你想根据full_price和sales_price的比较得到结果,那么试试:

SELECT *
FROM table
ORDER BY IF(full_price < IF(sales_price IS NULL, 0, sales_price), 
            full_price , sales_price ) ASC