mysql union和union all sum
时间: 2023-10-09 12:13:13 浏览: 92
UNION 和 UNION ALL 是 MySQL 中用于合并两个或多个 SELECT 语句结果集的操作符。它们的区别在于 UNION 会去重,而 UNION ALL 不会去重。
举个例子,假设有两个表 A 和 B,它们的数据如下:
表 A:
| id | name | score |
|----|------|-------|
| 1 | Tom | 80 |
| 2 | Jack | 90 |
| 3 | Lily | 85 |
表 B:
| id | name | score |
|----|-------|-------|
| 4 | David | 75 |
| 5 | Lucy | 95 |
| 6 | Mary | 80 |
如果我们想要将表 A 和表 B 的数据合并起来,可以使用 UNION 和 UNION ALL,例如:
```
-- UNION 去重
SELECT name, SUM(score) as total_score FROM (
SELECT name, score FROM A
UNION
SELECT name, score FROM B
) t GROUP BY name;
-- 输出结果:
| name | total_score |
|-------|-------------|
| David | 75 |
| Jack | 90 |
| Lily | 85 |
| Lucy | 95 |
| Mary | 80 |
| Tom | 80 |
-- UNION ALL 不去重
SELECT name, SUM(score) as total_score FROM (
SELECT name, score FROM A
UNION ALL
SELECT name, score FROM B
) t GROUP BY name;
-- 输出结果:
| name | total_score |
|-------|-------------|
| Tom | 80 |
| Jack | 90 |
| Lily | 85 |
| David | 75 |
| Lucy | 95 |
| Mary | 80 |
```
在上面的例子中,我们使用 UNION 去重后,结果集中只保留了一个 Tom 的数据,而使用 UNION ALL 则保留了表 A 和表 B 中的所有数据。
如果我们想要对合并后的结果集进行聚合操作,可以使用 SUM 函数进行求和。例如,我们想要计算每个人的总分数,可以在 UNION 和 UNION ALL 后面添加一个子查询,然后对子查询结果集进行聚合操作,如上面的例子所示。
阅读全文