我还在学习SQL,所以我想知道是否有更好的方法可以做到以下几点。
我需要获取列中最低和最高值的行数据(我们称之为columnA)。 我会用:
SELECT *
FROM table
ORDER BY columnA
DESC LIMIT 1
问题是由于LIMIT 1
我只得到一个结果,但ColumnA中可能有相同的最低/最高值,其他列中的值不同。我也需要那些其他行。
有SELECT(MAX)
但我相信这也只会产生一行数据。
我能想到的方法是将最高/最低columnA值放入变量,然后再回到第二个查询OR
,在别名表上使用LEFT JOIN
在单个查询中执行此操作但还有更直接的方法吗?
答案 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)