sql入门-Group子句和函数


sql


一、group子句

以下是一个包含 GROUP BY 子句的示例,并以 Markdown 表格形式展示数据:


员工信息表

员工编号部门编号工资
1108000
2109000
3207000
4206000
53010000

以下是使用 GROUP BY 子句计算每个部门的平均工资的 SQL 语句和结果:

SELECT department_id, AVG(salary) AS average_salary
FROM employees
GROUP BY department_id;
部门编号平均工资
108500
206500
3010000

在这里插入图片描述

Group本质上是按新主键生成一个新的表格
1、通常情况下,GROUP BY 后面的列名并非表格的主键。以员工信息表为例,每行代表一个员工,而多个员工可能隶属于同一个部门。在这种情况下,部门department_id列就可能存在多个相同的值。
2、当执行 GROUP BY 操作后,生成的新表格的主键将变为 GROUP BY 后面指定的列名 1、列名 2 等。
此外,在 SELECT 语句中,除了 GROUP BY 后面指定的列名外,其他列名必须以聚合函数的形式出现。常见的聚合函数包括 AVG(平均值)、SUM(总和)、COUNT(计数)、MIN(最小值)和 MAX(最大值)等。
比如salary只能以avg的形式出现

聚合函数和GROUP本质是纵向压缩,会减少结果集

二、条件函数和窗口函数

1.条件函数

、条件函数

  1. CASE WHEN 函数
    在这里插入图片描述
SELECT student_id, score,
       CASE WHEN score >= 90 THEN 'A'
            WHEN score >= 80 AND score < 90 THEN 'B'
            WHEN score >= 70 AND score < 80 THEN 'C'
            WHEN score >= 60 AND score < 70 THEN 'D'
            ELSE 'F'
       END AS grade
FROM students;

条件函数会根据条件生成一个新列,这个新列根据已有列产生,本质上横向扩展

2.窗口函数

窗口函数的本质仍然是生成一个新列,横向扩展
常用于数据分组之后,组内排序

例:使用窗口函数为每个员工在其部门内按工资降序排名:

SELECT employee_id, department_id, salary,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank
FROM employees;

在这里插入图片描述


总结

理解横向扩展和纵向扩展

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值