mysql多表统计数查询行转列
2018-01-15 18:43
351 查看
今天在统计查询时遇到以下问题,自己做个记录:
部门A在A地区发布一条数据库类型资源,在B地区发布一条文件类型资源。存在db表:
db
部门B也在A地区发布一条文件类型资源。存在file表如下:
file
期望结果:(按照部门和地区进行分组。分别统计某部门在某地区下发布的某种类型资源的数量)
sql语句如下:
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 连接两个表的结果。最后设定分组条件进行分组。分别对统计的类型数据进行求和得到最终结果
部门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 连接两个表的结果。最后设定分组条件进行分组。分别对统计的类型数据进行求和得到最终结果
相关文章推荐
- Mysql中根据子表的分组后的最大统计数获取主表中的信息
- nutch2.2 mysql 安装
- mysql 存储过程创建多个表
- 如何使用jQuery+PHP+MySQL来实现一个在线测试项目
- MYSQL之表分区----按日期分区
- MySQL中的常用函数
- mysql5.6压力测试 sysbench工具
- 通过两种方式增加从库――不停止mysql服务
- WINDOWS 下安装 APACHE PHP MYSQL PHPADMIN
- mysql乱码问题
- ubuntu mysql远程连接
- MySQL 出现 The table is full 的解决方法【转】
- 阿里云ECS Ubuntu安装PHP+Mysql+Apache+Nginx+Redis+Discuz
- SQLServer迁移至MySQL
- 绿色版mysql安装过程
- ubuntu下安装mysql及卸载mysql方法
- XAMPP笔记之重置MySQL/MariaDB Root用户密码
- MySQL之——将一个表的字段更新到另一个表中
- mysql创建event事件