MySQL 聚合函数注意事项

在标准的 SQL 中,使用聚合函数(如 MIN()MAX()SUM() 等)时,有一些重要的规则需要遵循,特别是在查询中包含非聚合列时:

  1. 聚合函数(Aggregate Function):像 MIN(), MAX(), COUNT(), SUM(), AVG() 等函数是用于对某些列的数据进行汇总或计算。例如,MIN(age) 返回 age 列中的最小值。

  2. 非聚合列(Non-Aggregated Columns):除了聚合函数之外的列,称为非聚合列(如 snamesid 等)。如果在查询中包含非聚合列,它们必须出现在 GROUP BY 子句中.

  3. GROUP BY 子句:当你使用聚合函数的同时查询非聚合列时,所有非聚合列必须出现在 GROUP BY 子句中。这是为了确保 SQL 能明确地知道如何对数据进行分组和汇总。例如,SELECT sname, MIN(age) 会导致错误,因为 SQL 不知道如何处理 sname(没有被分组或汇总)。

  4. 案例
    需求: 查询最小的年龄的学生名字
    正确示例 1:子查询

    SELECT sname, age 
    FROM student
    WHERE age = (SELECT MIN(age) FROM student);
    

    正确示例 2:ASC

    SELECT sname
    FROM student
    ORDER BY age ASC
    LIMIT 1;
    

    错误示范:

       SELECT sname, min(age)
       FROM student;
    

    这样的查询会抛出错误,原因是 sname 既不是聚合列也没有出现在 GROUP BY 中,SQL 无法确定在聚合结果时应如何处理 sname

示例一与示例二在出现多个同学都是min(age)的时候结果不太一样, ASC方式只会查询出这些最小年龄中第一个插入数据库的, 使用子查询则可以都查出. 大多数情况下使用子查询的方式.

总结:在使用聚合函数时,如果想查询其他列,必须确保这些列出现在 GROUP BY 中,或者通过子查询处理,以避免 SQL 引擎不确定如何处理聚合数据和非聚合列之间的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值