3
我有一个学生表:加入结果
student_id | name | course
-------------------------------------
1 | Jack | Comp_Sci
2 | John | Maths
3 | Matt | Comp_Sci
4 | Pete | Biology
表部门:
course | department
-------------------------
Comp_Sci | Comp_and_Math
Maths | Comp_and_Math
Biology | Bio_and_Chem
表using_computers
computer_id | student_id
-------------------------
1 | 2
2 | 2
2 | 3
2 | 4
3 | 1
4 | 2
4 | 4
而且表的计算机
computer_id | name
---------------------
1 | Apple
2 | Dell
3 | Asus
4 | Acer
而且我想列出所有使用电脑的部门这样
Comp_and_Maths: Apple 1, Dell 2, Asus 1, Acer 1, sum: 5
Bio_and_Chem: Dell 1, Acer 1 , sum:2
我已经写了2个查询,但我不知道如何将它们连接:
SELECT Departments.department, obj_in_class.list_ids
FROM Departments LEFT JOIN
(SELECT Departments.course, array_agg(students.student_id) AS list_ids
FROM Departments
LEFT JOIN students
ON Departments.course = students.course GROUP BY Departments.course) AS obj_in_class
ON Departments.course = obj_in_class.course GROUP BY Departments.department, obj_in_class.list_ids;
(SELECT students.student_id AS id, array_agg(m.name) AS computers
FROM students LEFT JOIN
(SELECT computers.name, using_computers.student_id FROM using_computers LEFT JOIN computers ON using_computers.computer_id = computers.computer_id) AS m
ON students.student_id = m.student_id
GROUP BY students.student_id) AS students_with_computers;
该列表必须全部在一行吗? –
是的,一行一行 – Mateusz
是的,这对于一个查询来说确实很糟糕。让我们看看有人回答你。我现在没有时间。最好的情况是在一个普通的列表结果和应用程序代码中解决它(不管它是什么),你可以根据需要进行格式化。 –