我试图在使用 MAX 函数返回的行上返回不同的列。例如,我有一张鸡蛋 => 10 和培根 => 20 的桌子。我试图根据值返回鸡蛋或培根。我试过这个:
SELECT column1, MAX(column2) FROM table
我似乎无法访问 column1 的值。我错过了 MAX 功能吗?
回答:
SELECT column1, MAX(column2) as col2 FROM table GROUP BY column1 ORDER BY col2
我通过使用 ORDER BY 函数让它工作。
SELECT column1, MAX(column2) as col2 FROM table GROUP BY column1 ORDER BY col2
您想max()
对一组数据应用聚合函数:
SELECT column1, MAX(column2)
FROM table
group by column1
如果您的意思是要确定最大值并获取与该最大值有关的详细信息,那么有多种方法可以做到这一点:
使用计算最大值的查询column2
作为标量子查询来匹配column2
结果(与@Sebas 的第一个建议相同):
SELECT *
FROM atable
WHERE column2 = (SELECT MAX(column2) FROM atable)
;
您也可以将子查询用作派生表:
SELECT t.*
FROM atable AS t
INNER JOIN (
SELECT MAX(column2) AS max_column2 FROM atable
) AS m ON t.column2 = m.max_column2
;
您可以简单地按降序对行进行排序column2
并返回最上面的行:
SELECT *
FROM atable
ORDER BY column2
LIMIT 0, 1
;
请注意,与前两个选项不同,此选项最多返回一行,即使最大值存在平局。
如果您需要处理的不仅仅是一个最大值,而是每个分组标准(或标准)的一个最大值,我相信上面的第二个选项最容易适应:
SELECT t.*
FROM atable AS t
INNER JOIN (
SELECT grouping_criterion, MAX(column2) AS max_column2
FROM atable
GROUP BY grouping_criterion
) AS m ON t.grouping_column = m.grouping_column
AND t.column2 = m.max_column2
;