-1

我试图在使用 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
4

3 回答 3

0

我通过使用 ORDER BY 函数让它工作。

SELECT column1, MAX(column2) as col2 FROM table GROUP BY column1 ORDER BY col2
于 2013-08-13T18:46:31.733 回答
0

您想max()对一组数据应用聚合函数:

SELECT column1, MAX(column2) 
FROM table
group by column1
于 2013-08-13T01:16:25.883 回答
0

如果您的意思是要确定最大值获取与该最大值有关的详细信息,那么有多种方法可以做到这一点:

  1. 使用计算最大值的查询column2作为标量子查询来匹配column2结果(与@Sebas 的第一个建议相同):

    SELECT *
    FROM atable
    WHERE column2 = (SELECT MAX(column2) FROM atable)
    ;
    
  2. 您也可以将子查询用作派生表:

    SELECT t.*
    FROM atable AS t
    INNER JOIN (
      SELECT MAX(column2) AS max_column2 FROM atable
    ) AS m ON t.column2 = m.max_column2
    ;
    
  3. 您可以简单地按降序对行进行排序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
;
于 2013-08-13T09:03:21.217 回答