mysql - 如何查询具有最低值的行,并知道最高值的值?

标签 mysql

考虑这两个查询:

SELECT *, 'b'    AS b    FROM someTable ORDER BY a ASC LIMIT 1;
SELECT *, MAX(a) AS maxA FROM someTable ORDER BY a ASC LIMIT 1;

如预期的那样,前一个查询返回 a 值最小的行。后一个查询返回存储在磁盘上的第一行(通常是主键值最低的行)。 我该如何解决这个问题?我的目的是获取具有最低 a 值的列的整行(如果有多个,我只需要一个,它不管哪个),另外我确实需要最高年龄的值(value)。在一个完美的世界中,我会运行两个查询,但由于对象在此应用程序中的序列化方式,如果不重构大量不属于我的代码,我将无法做到这一点。实际上我不介意 MySQL 引擎本身是否必须查询两次,重要的一点是输出在一行中返回。不幸的是,我无法为此查询编写存储过程。是的,* 运算符很重要,我无法列出所需的字段。而且行数太多,无法全部返回!

请注意,这个问题表面上类似于 a previous question ,但是那里提出的问题格式不正确且模棱两可,因此所有答案都解决了不是我本意的问题(无论多么有用,我确实学到了很多东西,我很高兴结果是这样)。这个问题更清楚地提出了预期的问题,因此应该会吸引不同的答案。

最佳答案

为什么不直接运行这个:

SELECT MIN(a) as minA, MAX(a) AS maxA FROM someTable

不幸的是,MySQL 不知道窗口函数。因此,如果您真的想选择 * 以及最小值/最大值,我想您将不得不求助于 JOIN:

SELECT * FROM 
(
  SELECT * FROM someTable ORDER BY a ASC LIMIT 1
) t1
CROSS JOIN
(
  SELECT MIN(a) as minA, MAX(a) AS maxA FROM someTable
) t2

或者子选择,如 Imre L's answer 中给出的那样

关于mysql - 如何查询具有最低值的行,并知道最高值的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982629/

相关文章:

php - "SELECT * FROM users WHERE id IN ( )"==失败

C# Mysql datareader - 如何使用 datareader 获取其他列

php - 在 JavaScript 时钟上使用时区

java - jpa hibernate,是否可以在不指定查询的情况下列出表的所有行?

mysql - 检查 csv 文件中是否存在数据库记录

mysql - 选择一个类别中的所有书籍,但属于其他类别的书籍除外

php - MySQL - 将 LIKE 运算符与 UNHEX() 函数结合使用

MySQL 通过另一个表的最小值更新一个表

mysql - 如何从 MySQL 表中获取同一 ID 的最新时间戳记录?

mysql - 使用 utf8_encode()(php 函数)的国际化内容最佳实践