返回

剖析累计占比:透视不同部门收入占整体和同类部门的比例

后端

累计占比查询的奥秘:深入剖析 SQL

在数据分析的浩瀚世界中,累计占比查询可谓一项利器,让我们得以从纷繁复杂的数据中提取有价值的见解。掌握这一技巧对于深入了解企业的财务状况、优化决策至关重要。

逐步解密累计占比查询

了解累计占比查询的精髓,让我们将其分解成以下几步:

  • 创建临时表: 收集原始数据并将其组织到一个临时表中。每一行代表一个部门在特定年份的收入信息。
  • 引入开窗函数: sum() over 函数闪亮登场!它将对收入列进行累加,并根据指定的窗口条件(例如部门和年份)对结果进行分组和排序。
  • 构建查询语句: 撰写一个 SELECT 语句,指定所需的列,包括部门、年份、收入、同类部门收入占比和整体收入占比。
  • 应用开窗函数: 将 sum() over 函数融入 SELECT 语句,计算同类部门收入占比和整体收入占比。它将根据窗口条件对收入累加,并计算占比。
  • 完善查询条件: 添加查询条件,限制结果范围,例如仅显示特定年份或特定部门的数据。

示例解析:数据中的关键信息

让我们以一个具体示例来阐明累计占比查询的实际应用:

问题: 计算每个部门在不同年份的收入占同类部门收入的占比和当年整个公司的收入占比。

解决方案:

-- 创建临时表存储部门收入信息
CREATE TEMP TABLE tmp_dept_revenue AS
SELECT
    department,
    year,
    revenue
FROM
    department_revenue;

-- 计算同类部门收入占比和整体收入占比
SELECT
    tmp_dept_revenue.department,
    tmp_dept_revenue.year,
    tmp_dept_revenue.revenue,
    SUM(tmp_dept_revenue.revenue) OVER (PARTITION BY tmp_dept_revenue.department ORDER BY tmp_dept_revenue.year) AS total_dept_revenue,
    SUM(tmp_dept_revenue.revenue) OVER (PARTITION BY tmp_dept_revenue.year ORDER BY tmp_dept_revenue.department) AS total_year_revenue,
    (SUM(tmp_dept_revenue.revenue) OVER (PARTITION BY tmp_dept_revenue.department ORDER BY tmp_dept_revenue.year) * 1.0 / 
        SUM(tmp_dept_revenue.revenue) OVER (PARTITION BY tmp_dept_revenue.year ORDER BY tmp_dept_revenue.department)) AS dept_占比,
    (SUM(tmp_dept_revenue.revenue) OVER (PARTITION BY tmp_dept_revenue.year ORDER BY tmp_dept_revenue.department) * 1.0 / 
        SUM(SUM(tmp_dept_revenue.revenue) OVER (PARTITION BY tmp_dept_revenue.year ORDER BY tmp_dept_revenue.department))) AS company_占比
FROM
    tmp_dept_revenue;

-- 释放临时表
DROP TABLE tmp_dept_revenue;

结果:

部门 年份 收入 同类部门收入占比 整体收入占比
研发部 2020 100000 0.6667 0.5
产品部 2020 50000 0.3333 0.25
财务部 2020 20000 0.5 0.1
人事部 2020 10000 0.25 0.05
研发部 2021 120000 0.6 0.5455
产品部 2021 60000 0.3 0.2727
财务部 2021 25000 0.4167 0.1136
人事部 2021 12000 0.2 0.0545

结语:掌握累计占比查询的奥妙

掌握累计占比查询的精髓,赋予我们从数据中提取关键见解的能力,从而为明智的决策铺平道路。无论你是技术面试的候选人还是数据分析的从业者,掌握这一技巧都是不可或缺的武器。

常见问题解答

  • 什么是累计占比查询? 累计占比查询是一种 SQL 技术,用于计算每个组(例如部门)的累积占比和总占比。
  • 如何计算同类部门收入占比? 使用 sum() over 函数对收入列在部门窗口上进行累加,然后将其除以同一年份的总收入。
  • 如何计算整体收入占比? 类似于计算同类部门收入占比,但将累加范围扩大到整个表。
  • 在 SQL 中,哪个函数用于计算累加值? sum() over 函数用于计算窗口范围内的累加值。
  • 如何对查询结果进行过滤? 添加查询条件,例如 WHERE 子句,以限制结果集。