SQL两张表需按等级一起统计各数据占比,但是两张表里等级的列名不一样,如何写
时间: 2024-02-23 10:59:37 浏览: 81
可以使用 UNION ALL 将两张表合并,并在 SELECT 语句中使用别名来区分两个表的等级列。然后再使用子查询计算每个等级的总数,最后再将每个等级的数量除以总数得到占比。例如,假设第一张表中等级列名为 level_1,第二张表中等级列名为 level_2,可以这样写:
```
SELECT
level,
count_1 / total_1 AS ratio_1,
count_2 / total_2 AS ratio_2
FROM (
SELECT
level_1 AS level,
COUNT(*) AS count_1,
(SELECT COUNT(*) FROM table1) AS total_1
FROM table1
GROUP BY level_1
UNION ALL
SELECT
level_2 AS level,
COUNT(*) AS count_2,
(SELECT COUNT(*) FROM table2) AS total_2
FROM table2
GROUP BY level_2
) AS t
```
这样可以将两张表的等级列合并为一个名为 level 的列,并分别计算每个等级的数量和总数。然后再将数量除以总数得到占比。注意,需要使用 UNION ALL 而不是 UNION,因为 UNION 会去重,可能会导致数据丢失。
阅读全文