1

考虑以下两个查询:

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值(如果有多个我只需要一个,那无所谓),另外我确实需要最高年龄的值。在一个完美的世界里,我会运行两个查询,但是由于对象在这个应用程序中的序列化方式,如果不重构很多不属于我的代码,我就无法做到这一点。我实际上不介意 MySQL 引擎本身是否必须查询两次,重要的是输出在一行中返回。不幸的是,我无法为此查询编写存储过程。是的,*运营商很重要,我无法列出所需的字段。而且行数太多,无法全部归还!

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

4

2 回答 2

4

为什么不运行这个:

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 的回答中所给出

于 2012-08-16T07:38:31.360 回答
2

在选择部分使用子查询:

SELECT *, 'b' AS b,
       (SELECT MAX(a) FROM someTable) AS maxA
  FROM someTable ORDER BY a ASC LIMIT 1;
于 2012-08-16T07:44:26.210 回答