mysql - 将不同查询的输出合并为单个查询输出

标签 mysql sql monetdb

如何组合不同查询的输出。

我有以下 sql 查询及其输出:

1) select d.departmentid, d.name, count(distinct(sg.personid)) as noOfStudents from department d inner join course c on c.departmentid = d.departmentid inner join student_grade sg on sg.courseid = c.courseid group by d.departmentid, d.name;
+--------------+--------------+--------------+
| departmentid | name         | noofstudents |
+==============+==============+==============+
|          101 | Computer Sci |            1 |
|          104 | Mech         |            2 |
|          103 | EEE          |            1 |
+--------------+--------------+--------------+



2) select d.departmentid, d.name, count(distinct(ci.personid)) as noOfTeachers from department d inner join course c on c.departmentid = d.departmentid inner join course_instructor ci on ci.courseid = c.courseid group by d.departmentid, d.name;
+--------------+--------------+--------------+
| departmentid | name         | noofteachers |
+==============+==============+==============+
|          101 | Computer Sci |            1 |
|          103 | EEE          |            2 |
|          104 | Mech         |            1 |
|          102 | ECE          |            3 |
+--------------+--------------+--------------+

3) select d.departmentid, d.name, count(distinct(c.courseid)) as noOfCourses from department d inner join course c on c.departmentid = d.departmentid group by d.departmentid, d.name;
+--------------+--------------+-------------+
| departmentid | name         | noofcourses |
+==============+==============+=============+
|          101 | Computer Sci |           3 |
|          102 | ECE          |           3 |
|          104 | Mech         |           1 |
|          103 | EEE          |           2 |
+--------------+--------------+-------------+

现在我想将所有三个合并到一个表中来显示数据。 我怎样才能做到这一点?

这里我尝试UNION操作,好用吗?

最佳答案

如果您需要将学生教师类(class)作为输出中的单独列,您可以尝试如下操作:

select 
    d.departmentid, d.name, 
    count(distinct(sg.personid)) as noOfStudents, 
    0 as noofteachers, 0 as noofcourses 
from 
    department d 
inner join 
    course c on c.departmentid = d.departmentid 
inner join 
    student_grade sg on sg.courseid = c.courseid 
group by 
    d.departmentid, d.name

UNION ALL

select 
    d.departmentid, d.name, 0 as noOfStudents,
    count(distinct(ci.personid)) as noOfTeachers, 0 as noofcourses 
from 
    department d 
inner join 
    course c on c.departmentid = d.departmentid 
inner join 
    course_instructor ci on ci.courseid = c.courseid 
group by 
    d.departmentid, d.name

UNION ALL

select 
    d.departmentid, d.name, 0 as noOfStudents, 
    0 as noofteachers, count(distinct(c.courseid)) as noOfCourses 
from 
    department d 
inner join 
    course c on c.departmentid = d.departmentid 
group by 
    d.departmentid, d.name

这应该会产生这样的结果:

+--------------+--------------+--------------+--------------+--------------+  
| departmentid | name         | noofstudents | noofteachers | noofcourses  |  
+==============+==============+==============+==============+==============+  
|          101 | Computer Sci |             1|             0|             0|  
|          104 | Mech         |             2|             0|             0|  
|          103 | EEE          |             1|             0|             0|  
|          101 | Computer Sci |             0|             1|             0|  
|          103 | EEE          |             0|             2|             0|  
|          104 | Mech         |             0|             1|             0|  
|          102 | ECE          |             0|             3|             0|  
|          101 | Computer Sci |             0|             0|             3|  
|          102 | ECE          |             0|             0|             3|  
|          104 | Mech         |             0|             0|             1|  
|          103 | EEE          |             0|             0|             2|  
+--------------+--------------+--------------+--------------+--------------+  

如果您需要聚合值,只需将整个查询括在括号中并对结果求和即可

SELECT 
    departmentid, name, 
    SUM(noOfStudents), SUM(noOfTeachers), SUM(noOfCourses)
FROM 
    (Query1 UNION ALL Query2 UNION ALL Query3) AS mySubQuery
GROUP BY 
    departmentid, name

关于mysql - 将不同查询的输出合并为单个查询输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232106/

相关文章:

php - while 和 between 之间有什么区别,在我的情况下什么是更好的选择?

r - MonetDB.R 批量插入

r - 无法使用 Monetdb.R 连接到本地数据库

node.js、odbc、monetdb - varchar 属性全部为 null

mysql 多个 ORDER BY 麻烦从同一个表自联接

php - Laravel 图像文件未正确存储在 Mysql 数据库中

mysql - 如果值不为空,则插入 mysql

PHP int被MySQL转换为不同的字符串

sql - Oracle NLS_SORT 无法通过 ALTER SESSION 工作?

sql - 我如何使用 PostgreSQL 的 DISTINCT ON 子句来返回重复项的计数?