MySQL 按 X 排序,但先对 Y 中的两个进行排序

标签 mysql sql-order-by

好的,希望有人能为此提供一个优雅的解决方案。我已经在两个查询中完成了这一任务,并认为它可以在一个查询中完成。

示例数据:

ID、区域、AgentID、价格
1、AZ1、15、100
2、AZ1、16、110
3、AZ2、15、180
4、AZ1、12、109
5、AZ3、15、180
6、AZ1、11、90
7、AZ2、15、140
8、AZ1、10、110
9、AZ4、11、120
10、AZ1、12、130

该查询的基本思想是,我需要从区域为 AZ1 的数据中获取所有内容 (SELECT *),并按价格降序排序。非常基本:SELECT * FROM data WHERE Area=AZ1 ORDER BY Price DESC

但是,我需要先对 AgentID=15 的两个条目进行排序。我之前已经将其作为两个查询来执行:

SELECT * FROM data WHERE Area=AZ1 AND AgentID=15 ORDER BY Price DESC LIMIT 2

SELECT * FROM data WHERE Area=AZ1 ORDER BY Price DESC

并且首先显示第一个结果。这样做并不是什么大不了的事,但为了让事情变得时尚和性感,我可以将这些结合起来吗?当我尝试子查询时,它说“此版本的 MySQL 尚不支持 LIMIT...etc 子查询”

不必通过 PHP 整理重复结果(我使用的是 array_diff)也很好,而且它可以在 URL 路由中修复不太好的分页(偏移量负 2 等)。

此外,如果这是实现内存/速度/任何方面的最佳方法,也请随意说出来! (尽管我对此表示怀疑)。

谢谢!

最佳答案

您可以使用union all来做到这一点:

select t.*
from ((SELECT *, ord = 1 FROM data WHERE Area=AZ1 AND AgentID=15 ORDER BY Price DESC LIMIT 2)
      union all
      (SELECT *, ord = 2 FROM data WHERE Area=AZ1 )
     ) t
order by ord, price desc

关于MySQL 按 X 排序,但先对 Y 中的两个进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18237956/

相关文章:

SQL ORDER BY DECODE 是将数字作为字符串排序吗?

MySql、选择、左连接、分组依据、限制..以及我必须在哪里下订单?

mysql - 在创建索引时查询期间与 mysql 服务器失去连接,但之后仍然获取索引

mysql - 如何将 NodeJs 响应转换为嵌套的 json 响应

mysql - 将 SQL 查询转换为 MySQL 5.7.23

sql - 如何在 SQL Server 中按数字对 varchar 数据类型列进行排序

sql - 根据满足哪个条件对行进行排序?

mysql - 优化 MySQL 查询,耗时将近 20 秒!

php - MySQl Error #1064 语法错误

php - MySQL - 按上下文随机排序