Выберите имя каждого клиента и общее количество времени, которое они провели в сессиях - PullRequest
0 голосов
/ 23 августа 2011

У меня установлены следующие таблицы в базе данных MySQL:

Client:
id
name

Session:
id
service_id
date

Attendance:
id
client_id
session_id

Service:
id
duration

Клиенты имеют много-много взаимосвязей с сеансами через таблицу посещаемости.

Я пытаюсь написать запрос, который будет возвращать имя каждого клиента и общее количество времени, которое они провели в сессиях, например:

Name       Total Time (Mins)
Person A   200
Person B   500
Person C   100

Пока мой запрос выглядит так:

SELECT 
(SELECT SUM(services.duration) 
FROM services
INNER JOIN sessions
ON sessions.service_id = services.id
INNER JOIN attendances
ON attendances.session_id = session.id
INNER JOIN clients
ON clients.id = attendances.client_id
GROUP BY clients.id) AS total_duration,
client.name 
FROM clients

Однако, это не возвращает результатов. Принимая во внимание, что если я выполняю какую-либо часть запроса изолированно, я получаю необходимые данные, а именно:

SELECT name FROM clients

OR

SELECT SUM(services.duration) 
FROM services
INNER JOIN sessions
ON sessions.service_id = services.id
INNER JOIN attendances
ON attendances.session_id = session.id
INNER JOIN clients
ON clients.id = attendances.client_id
GROUP BY clients.id

Может кто-нибудь увидеть причину, почему это не будет работать, когда я объединю эти два?

1 Ответ

1 голос
/ 23 августа 2011

В коррелированном запросе отсутствует условие WHERE.Я переписал ваш запрос, используя только объединения, чтобы сделать его более читабельным:

SELECT c.name, sum(srv.duration)
FROM clients c
    JOIN attendances a ON a.client_id = c.id
    JOIN sessions s ON s.id - a.session_id
    JOIN services srv ON srv.id = s.service_id
GROUP BY c.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...