欢迎光临
我们一直在努力

MySQL通过窗口函数进行分组

MySQL 8.0 推出了窗口函数,在8.0 之前 将数据进行分组操作会将多行合并成一行,而窗口函数则相反。

以下是测试数据:  

id dept_name name age
1 研发部

 

张三    

 

10
2 测试部 李四     20
3 技术总监部 王五     30
4 研发部 张五     50
5 测试部 李五     22
6 研发部 张四     50

    传统分组SQL:

    SELECT dept_name,sum(age) from dept_table GROUP BY dept_name

    查询结果:

    使用窗口函数进行分组SQL:

    SELECT
      id,
      dept_name,
      NAME,
      age,
      SUM(age) OVER (PARTITION BY dept_name ORDER BY id DESC) AS totalAge
    FROM
      dept_table

    查询结果:

    窗口函数的关键字是 over,over子句指定如何将查询行划分为组以供窗口函数处理。(每组称为一个窗口)。

    MySQL提供了仅用于窗口函数的非聚合函数,比如 ROW_NUMBER()

    ROW_NUMBER()就是将每个组内的行数加序号,它是连续的,如果根据值重复的字段进行排序,那么默认会按照任一不重复字段来区分顺序,不会存在并列序号。

    每个组加序号的SQL:

    SELECT id,dept_name,name,age, ROW_NUMBER() OVER(PARTITION BY dept_name ORDER BY id desc) AS 每组行数序号 FROM dept_table

    查询结果:

    赞(0)
    未经允许不得转载:171主机测评 » MySQL通过窗口函数进行分组
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址