今天在统计查询时遇到以下问题,自己做个记录:
部门A在A地区发布一条数据库类型资源,在B地区发布一条文件类型资源。存在db表:
部门 | 地区 | 名称 | 。。。 |
部门A | 湖南 | 数据库资源1 | 。。。 |
部门A | 河北 | 数据库资源2 | 。。。 |
部门 | 地区 | 名称 | 。。。 |
部门B | 河北 | 文件资源1 | 。。。 |
部门 | 地区 | 数据库 | 文件 |
部门A | 湖南 | 1 | 0 |
部门A | 河北 | 1 | 0 |
部门B | 河北 | 0 | 1 |
SELECT
T.部门,
T.地区,
SUM(T.fileCount) AS fileCount,
SUM(T.dbCount) AS dbCount
FROM
(SELECT
d.部门,
d.地区,
0 AS fileCount,
1 AS dbCount
FROM
db d
UNION ALL
SELECT
f.部门,
f.地区,
1 AS fileCount,
0 AS dbCount
FROM
file f
) T
GROUP BY
T.部门, T.地区
先分别查出对应表中的发布资源条数。根据返回的结构设定对应的列名,匹配的类型设定为1,没有的设定为0。再通过union all 连接两个表的结果。最后设定分组条件进行分组。分别对统计的类型数据进行求和得到最终结果