用SQL构建数据透视表

作者: 汤海怪 | 来源:发表于2019-01-13 21:04 被阅读1次

主要内容:CASE WHEN和开窗函数

1.简单使用group by

-- 计数
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
-- 求和
SELECT country, SUM(population) AS sum_pop
FROM Table_A
GROUP BY country;

2.使用CASE WHEN和GROUP BY

-- 定性分组
SELECT SUM(population),                 -- 原本简单的SELECT FROM就求得整列的总和
CASE WHEN 'china'  THEN 'asia'          -- 但CASE WHEN设定了多个分组,故分组求和
     WHEN 'india'  THEN 'asia'
     WHEN 'japan'  THEN 'asia'
     WHEN 'usa'    THEN 'america'
     WHEN 'canada' THEN 'america'
     WHEN 'mexico' THEN 'america'
                   ELSE 'others'  END
FROM Table_A
GROUP BY
CASE WHEN 'china'  THEN 'asia'
     WHEN 'india'  THEN 'asia'
     WHEN 'japan'  THEN 'asia'
     WHEN 'usa'    THEN 'america'
     WHEN 'canada' THEN 'america'
     WHEN 'mexico' THEN 'america'
                   ELSE 'others'  END;   -- 整个CASE WHEN语句是分组依据
before
after
-- 定量分组(无图)
SELECT                                               -- 整个CASE WHEN将salary转化成了salary_class,和着COUNT(*)一起被SELECT出来
CASE WHEN salary <= 500 THEN '1'                     -- 设定区间也能用CASE WHEN
     WHEN salary > 500 AND salary <= 600  THEN '2'
     WHEN salary > 600 AND salary <= 800  THEN '3'
     WHEN salary > 800 AND salary <= 1000 THEN '4'
                                          ELSE NULL END salary_class, COUNT(*) FROM Table_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
     WHEN salary > 500 AND salary <= 600  THEN '2'
     WHEN salary > 600 AND salary <= 800  THEN '3'
     WHEN salary > 800 AND salary <= 1000 THEN '4'
                                          ELSE NULL END;


-- 二次分组(分完国家分男女)
SELECT country,
SUM(CASE WHEN sex = '1' THEN population ELSE 0 END),  --男性人口
SUM(CASE WHEN sex = '2' THEN population ELSE 0 END)   --女性人口
FROM  Table_A
GROUP BY country;
before
after

3.开窗函数

-- 现有一群人的信息,包括姓名、所在城市、年龄和工资,需查阅5000元以下的人的信息及数量。
-- 聚合函数(不能得到汇总数量,因为聚合函数分组汇总了)
SELECT city, age, COUNT(*) AS num
FROM Table_A
WHERE salary < 5000
GROUP BY city, age;


-- 开窗函数
SELECT city, age, COUNT(*) OVER() AS num -- OVER()中常添加选项以改变聚合运算的窗口范围
FROM Table_A
WHERE salary < 5000;
image.png
image.png

相关文章

  • 用SQL构建数据透视表

    主要内容:CASE WHEN和开窗函数 1.简单使用group by 2.使用CASE WHEN和GROUP BY...

  • 数据分析师 - Week15

    SAS技术 用tabulate制作数据透视表 用sql制作报表

  • 你好,数据透视表——小白聊财务(4)

    你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你好,数据透视表你...

  • 数据透视表及美化

    一、 创建数据透视表: 1 插入→数据透视表 2 数据透视表选项→显示→选择经典透视表 3 拖动字符 4 数据透视...

  • 19.认识数据透视表

    我想学好数据透视表,因为它快速、高效、灵活。 数据透视表的基本知识: 日常分析也可以用数据透视表动态显示。 认识数...

  • 打卡23天

    数据透视表 (1) 如何插入数据透视表:选中任意数据——插入数据透视表—如需要经典模式(数据透视表选项——显示——...

  • 数据透视表12月3日

    数据透视表 12月3日 本节学习目录 数据透视表的概念 数据透视表的特点 数据透视表的运用技巧 一、数据透视表的概...

  • Day21数据透视表

    数据透视表-基本介绍四点 创建数据透视表、数据透视表的整理、转换为普通表格、刷新所有数据透视表 在对数据透视表处理...

  • 认识数据透视表

    Day 17 认识数据透视表&数据透视表布局及美化 2019.01.26 认识数据透视表 一、数据透视表(数据分析...

  • 认识数据透视表&数据透视表布局及美化

    Day 17 认识数据透视表&数据透视表布局及美化 2019.01.26 认识数据透视表 一、数据透视表(数据分析...

网友评论

    本文标题:用SQL构建数据透视表

    本文链接:https://www.haomeiwen.com/subject/jvgldqtx.html