您的位置:首页 > 健康 > 美食 > SQL - 汇总与分组

SQL - 汇总与分组

2025/2/24 12:04:24 来源:https://blog.csdn.net/m0_74403543/article/details/141299444  浏览:    关键词:SQL - 汇总与分组
  • 聚合函数
    • MySQL自带一堆内置函数,其中一些叫聚合函数,用它们汇总数据,因为它们取某一列的值并聚合它们,导出一个单一值。并且聚合函数只会运行非空值,如果列中有的值是null,它不会被算在内。
    • max(), min(), avg(), sum(), count(),count(*) 返回表中的所有记录数,count(distinct client_id)具有去重功能,默认不去重
    • select 'first half of 2019' as date_range,sum(invoice_total) as total_sales,sum(payment_total) as total_payment,sum(invoice_total-payment_total) as want
      from invoices
      where invoice_date between '2019-01-01' and '2019-06-30'	-- 控制范围,也就是筛选union
      select 'second half of 2019' as date_range,sum(invoice_total) as total_sales,sum(payment_total) as total_payment,sum(invoice_total-payment_total) as want
      from invoices
      where invoice_date between '2019-07-01' and '2019-12-31'union
      select 'total' as date_range,sum(invoice_total) as total_sales,sum(payment_total) as total_payment,sum(invoice_total-payment_total) as want
      from invoices
      where invoice_date between '2019-01-01' and '2019-12-31'

  • group by 子句
    • group by 子句在SQL查询中用于将结果集按一个或多个列进行分组。它的主要作用是将具有相同值的行归为一组,以便对每组数据进行聚合计算(如求和、计数、平均值等)
    • -- group by 分组
      select date,name as payment_method,sum(amount) as total_payments
      from payments p
      join payment_methods pm on p.payment_method=pm.payment_method_id
      group by date,payment_method
      order by date

  • having 子句
    • 将结果集按一个或多个列分组后,再次筛选数据,但是筛选的列名必须是是在select中的
    • -- having 再次筛选
      select date,name as payment_method,sum(amount) as total_payments
      from payments p
      join payment_methods pm on p.payment_method=pm.payment_method_id
      group by date,payment_method
      having total_payments>10
      order by date

  • rollup 运算符
    • 在分组后,每个组都有用聚合函数运算的值,对应的每个组的汇总和整个结果集的汇总可以使用到 with rollup,如group by client_id with rollup,不过这列名不能使用别名
    • -- rollup运算符
      select 
      client_id,
      sum(invoice_total) as total_sales
      from invoices
      group by client_id with rollup

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com