2

我仍在学习 SQL,所以我想知道是否有更好的方法来执行以下操作。

我需要获取列中最低和最高值的行数据(我们称之为columnA)。我会使用:

SELECT *
  FROM table
 ORDER BY columnA
  DESC LIMIT 1

问题是我只得到一个结果,因为LIMIT 1ColumnA 中可能有相同的最低/最高值,而在其他列中具有不同的值。我也需要其他行。

有,SELECT(MAX)但我相信这也只会产生一行数据。

我能想到的方法是将最高/最低的 columnA 值放入一个变量中,然后返回到第二个查询中,OR使用LEFT JOIN别名表在单个查询中执行此操作,但还有更直接的方法吗?

4

2 回答 2

3

最简单的方法是执行子查询:

SELECT * FROM MyTable WHERE columnA = (SELECT MAX(columnA) FROM MyTable);

您甚至可以同时查询两个极端:

SELECT * FROM MyTable
WHERE columnA = (SELECT MAX(columnA) FROM MyTable);
   OR columnA = (SELECT MIN(columnA) FROM MyTable);

我还没有测试过下一个(不知道 MySQL 是否支持UNION子查询),但它应该也可以工作,可能效率更高一些(取决于您的数据大小)。

SELECT * FROM MyTable
WHERE columnA IN (
    SELECT MAX(columnA) FROM MyTable
    UNION
    SELECT MIN(columnA) FROM MyTable
);
于 2012-09-25T11:24:04.423 回答
2

另一种选择是:

SELECT * 
FROM MyTable m1 
WHERE not exists (select 1 from MyTable where columnA > m1.columnA)
于 2012-09-25T11:27:12.590 回答