mysql - 同时在多个字段上进行 ORDER BY 而忽略 MySQL 中的特定值

标签 mysql sql-order-by

假设我有一张 table ,上面有一堆产品,有些是特价的,有些是二手的。

| Desc       |  Sale price | Special price | Used price
--------------------------------------------------------
| Product 1  |       20.00 |         15.00 |       0.00
| Product 2  |       38.00 |          0.00 |      22.00
| Product 3  |       21.00 |          0.00 |       0.00
| Product 4  |       16.00 |         12.00 |       8.00
| Product 5  |        0.00 |          0.00 |      25.00

我正在尝试找出一种方法来对产品(在同一查询中)从三列中的最低值到最高值进行排序,同时忽略所有 0.00(例如:二手0.00 表示该特定产品没有二手货)。

结果是这样的:

| Desc       |  Sale price | Special price | Used price
--------------------------------------------------------
| Product 4  |       16.00 |         12.00 |      *8.00   8.00 is the lowest
| Product 1  |       20.00 |        *15.00 |       0.00   15.00 is the lowest, 1x 0.00 is ignored
| Product 3  |      *21.00 |          0.00 |       0.00   21.00 is the lowest, 2x 0.00 are ignored
| Product 2  |       38.00 |          0.00 |     *22.00   22.00 is the lowest, 1x 0.00 is ignored
| Product 5  |        0.00 |          0.00 |     *25.00   25.00 is the lowest, 2x 0.00 are ignored

如有任何帮助,我们将不胜感激。 谢谢!

最佳答案

这里有一个使用 LEAST()GREATEST() 的技巧

ORDER BY LEAST(IF(SalePrice = 0, GREATEST(SalePrice, SpecialPrice, UsedPrice) + 1, SalePrice), 
               IF(SpecialPrice = 0, GREATEST(SalePrice, SpecialPrice, UsedPrice) + 1, SpecialPrice), 
               IF(UsedPrice = 0, GREATEST(SalePrice, SpecialPrice, UsedPrice) + 1, UsedPrice)) ASC

关于mysql - 同时在多个字段上进行 ORDER BY 而忽略 MySQL 中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18083355/

相关文章:

mysql - Bash 脚本 - 复杂的 MYSQL 语句

linq - LINQ 中的 OrderBy 如何工作(在幕后)?

SQL Server 对奇数 ASC 和偶数 DESC 排序

SQL 动态 ASC 和 DESC

MySQL 社区版

php - 尝试使用 PDO 从数据库动态加载数据

php - 解析 rss feed、将其插入 mysql 数据库然后使用 ajax 异步访问的最佳途径是什么?

Java JPA/Hibernate级联删除

sql - 如何使用 ms sql 进行更新和排序

MySQL复杂的ORDER BY问题