首页 > 解决方案 > 带有二级子排序的 OrderBy

问题描述

我有一个查询,我需要构建一个按匹配优先级对项目进行排序的查询;但是,当我有重复产品的情况下,我希望它在初始匹配时以最高优先级分组。不确定这在 MySQL 中是否可行,或者我是否需要在 PHP 或 JS 中发布处理。

+-------+----------+---------+
| order_id | Priority | Product |
+-------+----------+---------+
| 12345 |        1 |  334455 |
| 12345 |        1 |  212121 |
| 12355 |        2 |  666666 |
| 12356 |        3 |  212121 |
| 12360 |        4 |  777777 |
+-------+----------+---------+

我尝试过的,当然失败了。我尝试使用“FIELD()”并做同样的事情。

SELECT Order_id, Priority, Product FROM Products ORDER BY Priority ASC, Product

期望的结果

+-------+----------+---------+
| Order_id | Priority | Product |
+-------+----------+---------+
| 12345 |        1 |  334455 |
| 12345 |        1 |  212121 |
| 12356 |        3 |  212121 |
| 12355 |        2 |  666666 |
| 12360 |        4 |  777777 |
+-------+----------+---------+

标签: mysql

解决方案


这样的事情应该可以解决问题:

select order_id, Priority, Product,
    (select min(Priority) from Products p1 where p.product = p1.product) as MinPrior
from Products p
order by MinPrior asc, Product asc, Priority asc;

我知道,它与“期望的结果”中的不完全相同,但如果我正确理解了问题,它就会完成任务所需的工作。

我希望,我能帮上忙。


推荐阅读