У меня есть таблица с пользователями, таблица с назначениями и таблица с задачами, каждая из которых связана с назначением и пользователем. Я хочу получить список студентов, у которых есть задача по данному заданию. (Я попытался максимально упростить этот образец БД для своего вопроса.)
Вот SQL Fiddle: http://sqlfiddle.com/# ! 9 / 625a13 / 1
Для справки, вот как выглядит структура БД:
CREATE TABLE users (
id SERIAL,
name VARCHAR(32),
PRIMARY KEY (id)
);
CREATE TABLE assignments (
id SERIAL,
title VARCHAR(45),
assigned_by_user_id INT,
PRIMARY KEY (id)
);
CREATE TABLE tasks (
id SERIAL,
user_id INT,
assignment_id INT,
complete INT,
PRIMARY KEY (id)
);
INSERT INTO users VALUES (1, 'Student Joe'), (2, 'Student Fred'), (3, 'Teacher Bob');
INSERT INTO assignments VALUES (1, 'Math Homework', 3), (2, 'History Homework', 3), (3, 'Science Homework', 3);
INSERT INTO tasks VALUES (1,1,1,1), (2,1,2,1), (3,1,3,0), (4,2,1,1), (5,2,2,0), (6,2,3,0);
А вот пример запроса из этих данных:
SELECT a.id, a.title, u.name AS teacher_name, '' AS students_included,
(COUNT(CASE WHEN t.complete = 1 THEN t.id ELSE NULL END)/COUNT(t.id)*100) AS percent_complete
FROM assignments AS a
JOIN users AS u ON a.assigned_by_user_id = u.id
LEFT JOIN tasks AS t ON a.id = t.assignment_id
GROUP BY a.id
Вот скриншот того, что у меня есть:
Вот мой целевой результат:
Как сделать так, чтобы запрос возвращал имена учащихся, связанные с этими заданиями? В некоторых случаях может не быть никаких заданий (нет студентов), в некоторых случаях один студент, в некоторых случаях несколько студентов. Я хотел бы каким-то образом получить массив / список CSV с именами студентов в соответствующем столбце.
(я знаю, что могу выполнять отдельные запросы для каждой строки - например, в PHP, поскольку я l oop через результаты - и получить этот результат, но это будет медленным, громоздким и ресурсоемким - я хотел бы получить значения имени ученика с помощью одного запроса MySQL, если это вообще возможно - я просто могу ' Не думаю, как это сделать.)