如何查询具有最低值的行,还要知道最高值的值?

时间:2012-08-16 07:36:29

标签: 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值的列的整行(如果有多个我只需要一个,那没关系哪个),另外我确实需要最高年龄的价值。在一个完美的世界中,我会运行两个查询,但是由于在这个应用程序中对象被序列化的方式,如果不重构很多不是我的代码,我就不能这样做。我实际上不介意MySQL引擎本身是否必须查询两次,重要的是输出是在单行中返回的。遗憾的是,我无法为此查询编写存储过程。是的,*运算符很重要,我无法列出所需的字段。还有太多的行要归还它们!

请注意,这个问题表面上与a previous question类似,但问的问题是形式不明确和含糊不清,因此所有答案都解决了我不想要的问题(无论多么有用,我确实学到了很多东西我很高兴,事实证明这一点)。这个问题更清楚地询问了预期的问题,因此应该吸引不同的答案。

2 个答案:

答案 0 :(得分:4)

为什么不运行它:

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

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

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

中给出的子选择

答案 1 :(得分:2)

在选择部分中使用子查询:

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