聚合函数与group by

  • 聚合函数
    • 功能理解
      • 聚合函数是对一组数据进行计算并返回一个单一的值。例如,COUNT(*)用于计算表中的行数,SUM(column_name)用于计算指定列中所有值的总和,AVG(column_name)用于计算指定列的平均值等。
      • 常见的聚合函数包括COUNTSUMAVGMAXMIN。比如,在一个销售订单表orders中,SUM(order_amount)可以计算所有订单金额的总和,MAX(order_date)可以找到最新的订单日期。
    • 使用注意事项
      • 聚合函数通常是在查询中对一组数据进行操作,所以它们经常与GROUP BYHAVING子句一起使用,以对分组后的数据进行聚合计算。如果在没有分组的情况下使用聚合函数,它将对整个表(或满足WHERE条件的行)进行计算。例如,SELECT COUNT(*) FROM customers;会返回customers表中的总行数。
      • 除了COUNT(*)外,其他聚合函数(如SUMAVG等)在计算时会忽略列中的NULL值。例如,在一个成绩表中,如果有一个学生的成绩列为NULL,那么在计算AVG(score)时,这个NULL值会被忽略。
      • 当使用多个聚合函数时,要注意它们的计算顺序和逻辑。例如,在计算AVG(SUM(order_amount))这种复杂的表达式时,需要先理解先执行SUM函数对每个分组(如果有分组)进行求和,然后再对这些求和结果求平均值。这种复杂的嵌套聚合函数使用场景相对较少,但在一些复杂的数据分析中可能会用到。
  • GROUP BY
    • 功能理解
      • GROUP BY子句用于将查询结果按照一个或多个列进行分组。例如,在一个员工表employees中,如果按照部门(department列)进行分组,那么所有属于同一个部门的员工记录会被归为一组。
      • 它通常与聚合函数一起使用,用于对每个分组进行聚合计算。比如,SELECT department, COUNT(*) FROM employees GROUP BY department;会按照部门对员工进行分组,并计算每个部门的员工人数。
    • 使用注意事项
      • SELECT子句中,除了聚合函数外,其他列必须出现在GROUP BY子句中。例如,SELECT department, name, COUNT(*) FROM employees GROUP BY department;是错误的,因为name列没有在GROUP BY子句中出现。正确的写法可能是只选择department列和聚合函数,如SELECT department, COUNT(*) FROM employees GROUP BY department;或者将name列也添加到GROUP BY子句中,如SELECT department, name, COUNT(*) FROM employees GROUP BY department, name;
      • 分组的顺序会影响结果。如果按照多个列进行分组,如GROUP BY column1, column2,那么先按照column1进行分组,然后在每个column1分组内再按照column2进行分组。例如,在一个销售数据表中,按照region(地区)和product_type(产品类型)进行分组,会先将数据按照地区分组,然后在每个地区分组内再按照产品类型分组。
      • GROUP BY子句可以和HAVING子句一起使用。HAVING子句用于对分组后的结果进行筛选,类似于WHERE子句对整个表的筛选,但WHERE子句不能用于筛选聚合函数的结果,而HAVING可以。例如,SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department HAVING employee_count > 10;会筛选出员工人数大于 10 的部门。

猜你喜欢

转载自blog.csdn.net/qq_41924536/article/details/144117305
今日推荐