如何在MySQL中使用max

时间:2019-05-24 09:58:04

标签: mysql

我有一个名为user的表,下面以图片形式提供。在给定的表中,我要选择偏移量为1的最大值。

Table

我使用的查询如下:

select offset, max(value) as max_val from user having offset = 1

从上面的查询中我希望得到max_value = 4,但是得到max_value = 0。请帮助我。

3 个答案:

答案 0 :(得分:2)

带有WHERE的简单GROUP BY子句在您的情况下就足够了:

SELECT `offset`, max(value) as max_val 
FROM `user` 
WHERE `offset` = 1
GROUP by `offset`

也请避免使用reserved words作为列名,您可能需要通过将`(反引号)括起来来转义列名

或与GROUP BY一起使用

select `offset`, max(value) as max_val 
from `user` 
group by `offset`
having `offset` = 1

答案 1 :(得分:2)

您可以在此处使用一些技巧,以避免需要使用GROUP BY

此查询(Arulkumar的答案)

查询

SELECT `offset`, max(value) as max_val 
FROM `user` 
WHERE `offset` = 1
GROUP by `offset`

可以重写为下面的查询。
注意,仅当您根据offset = 1这样的一种条件进行过滤时,才可能转换,例如offset IN(1, 2)这样的两个或更多条件

查询

SELECT 
   '1' AS `offset`
  , MAX(CASE WHEN `offset` = 1 THEN `value` END) AS max_val
FROM 
 a 

结果

| offset | max_val |
| ------ | ------- |
| 1      | 4       |

注意 作为'1' AS offset的有效SQL是文字,因此不需要分组。
因此,它与GROUP BY有关的ANSI / ISO SQL标准和MySQL sql_mode ONLY_FULL_GROUP_BY(强制您编写有效的GROUP BY SQL

)均有效

请参阅demo

更优化的版本

SELECT 
 '1' AS `offset`
, MAX(`value`) AS max_val
FROM 
 a 
WHERE 
 a.`offset` = 1

由于它可以使用索引而不是表扫描,请参见demo

奖金

您还可以在同一表上使用自连接左连接来模拟MAX / MIN聚合函数,从而也避免使用GROUP BY
另外,您可以在两个或两个以上的条件下使用它,例如offset IN(1, 2)

模拟最大值

  SELECT 
     *
    FROM 
     a a1 
    LEFT JOIN
     a a2 
    ON
       a1.offset = a2.offset
     AND
       a1.value < a2.value
    WHERE
     a2.value IS NULL

结果

| offset | value | offset | value |
| ------ | ----- | ------ | ----- |
| 1      | 4     |        |       |
| 2      | 4     |        |       |
| 3      | 4     |        |       |

请参见demo和过滤器WHERE offset = 1请参见demo

答案 2 :(得分:-1)

检查这是查询

SELECT * FROM user WHERE `offset` = 1 ORDER BY value DESC LIMIT 1