Reputation: 1350
This is complex query, and I was hoping to achieve it one statement, rather than have to juggle array values in PHP.
To achieve the desired output of:
User Jobs Total
John D. 5 $1245.67
Mary L. 3 $800.56
So far, this is the query I have:
SELECT
SUM(job.cost) AS sum,
COUNT(DISTINCT job.user) as count,
user.id, user.firstname, user.lastname
FROM `job`
LEFT JOIN `user` ON job.user = user.id
GROUP BY user.id
But the count value is wrong: it's the distinct user, so of course each is going to be wrong. How do I fix this?
TABLE user
id, name, etc.
TABLE job
id, user, cost
With ONE user
TO MANY job
UPDATE
This seems to be working right:
SELECT
SUM(job.cost) AS sum,
COUNT(1) as count,
user.id, user.firstname, user.lastname
FROM `job`
LEFT JOIN `user` ON job.user = user.id
GROUP BY user.id
Upvotes: 1
Views: 327
Reputation: 4072
SET @seq = 0;
SELECT place FROM
(SELECT
@seq := @seq + 1 AS place
SUM(job.cost) AS sum,
COUNT(1) as count,
user.id, user.firstname, user.lastname
FROM `job`
LEFT JOIN `user` ON job.user = user.id
GROUP BY user.id
ORDER BY COUNT(1) DESC)
AS list
WHERE list.id = 'my_user_id'
Upvotes: 2