I have the following tables setup in a MySQL database:
Client:
id
name
Session:
id
service_id
date
Attendance:
id
client_id
session_id
Service:
id
duration
Clients have a many to many relationship with Sessions through the Attendance table.
I am trying to write a query which will return each clients’ name and the total amount of time they have spent in sessions, like this:
Name Total Time (Mins)
Person A 200
Person B 500
Person C 100
So far my query looks like this:
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
However, this returns no results. Whereas, if I run either part of the query in isolation I get the data I need, ie:
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
Can anyone see a reason why it would not be working when I combine the two?
You are missing a
WHEREcondition in correlated query. I rewrote your query with only joins to make it more readable: