考虑这两个查询:
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/