使用Order By和Limit 1获取最大值

时间:2018-03-13 16:59:37

标签: mysql sql

首先,我正在使用MySQL。当我进行以下查询时:

SELECT CodE,sum(tiempo) AS 'tiempo total' 
FROM Participa 
GROUP BY CodE
ORDER BY 'tiempo total' DESC LIMIT 1;

它显示了我表格的第一行而不是MAX值。但是,如果我进行以下查询:

SELECT CodE,sum(tiempo) 
FROM Participa
GROUP BY CodE 
ORDER BY 2 DESC LIMIT 1

我得到了正确的结果。 我刚刚更改了别名'tiempo total',因为它应该是等价的。

怎么可能?

1 个答案:

答案 0 :(得分:0)

仅对字符串和日期常量使用单引号 - 永远不会对列别名使用。所以:

SELECT CodE, sum(tiempo) AS `tiempo total`
FROM Participa 
GROUP BY CodE
ORDER BY `tiempo total` DESC
LIMIT 1;

您按常量字符串排序,而不是列名称。因此,如果您在查询中获得最大值,那将是一次完全意外。

注意:您可以通过提供永远不需要转义的列名来解决这些问题:

SELECT CodE, sum(tiempo) AS tiempo_total
FROM Participa 
GROUP BY CodE
ORDER BY tiempo_total DESC
LIMIT 1;

也更容易打字。