合并表

SQL 报表制作

Tyler Pernes

Learning & Development Consultant

目标报表

按人群分组的金牌数
(仅限西欧国家)
+----------+--------------------+-------+
| season   |  demographic_group | golds |
|----------+--------------------+-------|
| Winter   | Male Age 26+       | 13    |
| Winter   | Female Age 26+     | 8     |
| Summer   | Male Age 13-25     | 7     |
| Summer   | Female Age 13-25   | 6     |
| Winter   | Male Age 13-25     | 4     |
| Summer   | Male Age 26+       | 4     |
| Winter   | Female Age 13-25   | 4     |
| Summer   | Female Age 26+     | 2     |
+----------+--------------------+-------+
SQL 报表制作

相关表

SQL 报表制作

相关表

SQL 报表制作

选项 A:先 JOIN,后 UNION

SQL 报表制作

选项 A:先 JOIN,后 UNION

步骤 1: 编写上方含 JOIN 的查询

SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM summer_games AS sg
JOIN athletes AS a 
ON sg.athlete_id = a.id;
查询成功运行!
SQL 报表制作

选项 A:先 JOIN,后 UNION

步骤 2: 编写下方查询,并用 UNION 合并两者

SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM summer_games AS sg
JOIN athletes AS a 
ON sg.athlete_id = a.id
UNION ALL
SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM winter_games AS wg
JOIN athletes AS a 
ON wg.athlete_id = a.id;
SQL 报表制作

选项 B:先 UNION,后 JOIN

SQL 报表制作

选项 B:先 UNION,后 JOIN

步骤 1: 先创建初始 UNION

SELECT 
    athlete_id, 
    gold  
FROM summer_games AS sg
UNION
SELECT 
    athlete_id, 
    gold  
FROM winter_games AS wg;
SQL 报表制作

选项 B:先 UNION,后 JOIN

步骤 2: 转为子查询并 JOIN

SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM
    (SELECT 
         athlete_id, 
         gold  
    FROM summer_games AS sg
    UNION ALL
    SELECT athlete_id, gold  
    FROM winter_games AS wg) AS g
JOIN athletes AS a 
ON g.athlete_id = a.id;
SQL 报表制作

对比

选项 A

SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM summer_games AS sg
JOIN athletes AS a 
ON sg.athlete_id = a.id
UNION ALL
SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM winter_games AS wg
JOIN athletes AS a 
ON wg.athlete_id = a.id;

选项 B

SELECT 
    athlete_id, 
    gender, 
    age, 
    gold  
FROM
    (SELECT 
         athlete_id, 
         gold  
    FROM summer_games AS sg
    UNION ALL
    SELECT athlete_id, gold  
    FROM winter_games AS wg) AS g
JOIN athletes AS a 
ON g.athlete_id = a.id;
SQL 报表制作

要点回顾

  • 生成同一报表有多种方法
  • 分步编写,便于排错
SQL 报表制作

开始查询!

SQL 报表制作

Preparing Video For Download...