💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
💝💝💝如有需要请大家订阅我的专栏【数据库系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!
文章目录
- 引言
- 一、窗口函数基础
- 1. `RANK()`与`DENSE_RANK()`
- 案例:员工销售排名
- 二、分组累加与平均值
- 2. `SUM() OVER ()`与`AVG() OVER ()`
- 案例:计算累计销售额与平均销售额
- 三、分区分组与排序
- 3. `PARTITION BY`与`ORDER BY`
- 案例:按部门计算员工销售排名
- 四、偏移量函数
- 4. `LAG()`与`LEAD()`
- 案例:获取上个月与下个月的销售额
- 五、统计函数
- 5. `COUNT() OVER ()`与`ROW_NUMBER()`
- 案例:统计部门内员工总数及分配行号
- 总结
引言
在复杂的数据分析场景中,达梦数据库的分析函数扮演着至关重要的角色。它们允许用户在单个查询中对数据进行分组、排序、排名及聚合计算,极大地提升了数据分析的灵活性和效率。本篇将深入探讨达梦数据库中几种关键的分析函数,并通过具体案例SQL来解析其用法,帮助你更好地掌握这些强大的工具。
一、窗口函数基础
窗口函数(Window Function)在处理数据时,为每一行数据定义了一个“窗口”(一组行),在该窗口内进行计算。这使得我们能够在保留表的原始行结构的同时,进行分组统计或排序比较。
1. RANK()
与DENSE_RANK()
案例:员工销售排名
假设有一个sales_data
表,记录了员工的销售业绩。
SELECT
employee_id,
sale_amount,
RANK() OVER (ORDER BY sale_amount DESC) AS rank,
DENSE_RANK() OVER (ORDER BY sale_amount DESC) AS dense_rank
FROM sales_data;
RANK()
会为销售金额降序排列的每个员工分配一个唯一的排名,相同销售额的员工会有相同的排名,但会导致后续排名跳过(如两个第一,则无第二,直接到第三)。DENSE_RANK()
则不会跳过排名,即使有相同的销售额,也会紧接上一个排名给出下一个连续的排名。
二、分组累加与平均值
2. SUM() OVER ()
与AVG() OVER ()
案例:计算累计销售额与平均销售额
SELECT
month,
SUM(sale_amount) OVER (ORDER BY month) AS cumulative_sales,
AVG(sale_amount) OVER (ORDER BY month) AS moving_average
FROM sales_data;
SUM() OVER ()
按月份顺序计算累计销售额。AVG() OVER ()
计算截至当前月的移动平均销售额。
三、分区分组与排序
3. PARTITION BY
与ORDER BY
案例:按部门计算员工销售排名
SELECT
department,
employee_id,
sale_amount,
RANK() OVER (PARTITION BY department ORDER BY sale_amount DESC) AS department_rank
FROM sales_data;
- 使用
PARTITION BY department
对不同部门内的员工销售业绩进行独立排名。
四、偏移量函数
4. LAG()
与LEAD()
案例:获取上个月与下个月的销售额
SELECT
month,
sale_amount,
LAG(sale_amount) OVER (ORDER BY month) AS prev_month_sales,
LEAD(sale_amount) OVER (ORDER BY month) AS next_month_sales
FROM sales_data;
LAG()
获取前一行(上个月)的销售额。LEAD()
获取后一行(下个月)的销售额。
五、统计函数
5. COUNT() OVER ()
与ROW_NUMBER()
案例:统计部门内员工总数及分配行号
SELECT
department,
employee_id,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY hire_date) AS row_num,
COUNT(*) OVER (PARTITION BY department) AS total_employees
FROM employee_details;
COUNT() OVER (PARTITION BY department)
计算每个部门的员工总数。ROW_NUMBER()
按部门及入职日期为员工分配行号。
喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
💝💝💝如有需要请大家订阅我的专栏【数据库系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!
总结
达梦数据库的分析函数为数据分析师提供了强大的工具箱,使他们能够在数据的海洋中快速挖掘有价值的信息。通过上述案例的学习,希望你能掌握这些函数的精髓,并在实际工作中灵活运用,提升数据分析的效率与深度。随着达梦数据库的不断更新,新的功能和优化也将持续涌现,持续关注官方文档和社区动态,将帮助你保持对最新技术的敏锐洞察力。
DM达梦数据库相关文章索引 | 文章链接 |
---|---|
DM达梦数据库关于时间日期函数的总结 | DM达梦数据库关于时间日期函数的总结 |
DM达梦数据库快捷键 | DM达梦数据库快捷键 |
DM达梦数据库基本语法整理 | DM达梦数据库基本语法整理 |
DM达梦数据库函数分析(与oracle相应函数区别及用法分析) | DM达梦数据库函数分析(与oracle相应函数区别及用法分析) |
DM达梦数据库函数分析(与mysql对应函数区别及用法分析) | DM达梦数据库函数分析(与mysql对应函数区别及用法分析) |
DM达梦数据库字符串函数整理 | DM达梦数据库字符串函数整理 |
❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙