SQL - ORDER BY ASC LIMIT 1排除了多个相同的结果 - 最佳方法?

时间:2012-09-25 11:21:30

标签: mysql sql limit

我还在学习SQL,所以我想知道是否有更好的方法可以做到以下几点。

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

SELECT *
  FROM table
 ORDER BY columnA
  DESC LIMIT 1

问题是由于LIMIT 1我只得到一个结果,但ColumnA中可能有相同的最低/最高值,其他列中的值不同。我也需要那些其他行。

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

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

2 个答案:

答案 0 :(得分: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
);

答案 1 :(得分:2)

另一种选择是:

SELECT * 
FROM MyTable m1 
WHERE not exists (select 1 from MyTable where columnA > m1.columnA)