How do I change the following dependent subquery to self join?
SELECT d.name, d.created,
(SELECT SUM( q1.payout ) FROM client AS q1 WHERE q1.uid = d.uid) AS payout,
(SELECT COUNT( q2.uid ) FROM client AS q2 WHERE q2.uid = d.uid AND q2.winning =1) AS cnt
FROM client AS d group by d.name, d.created ORDER BY cnt DESC LIMIT 0 , 10;
SELECT d.name, d.created, SUM(q1.payout) AS psum, COUNT(q2.uid) AS cnt
FROM client d
LEFT JOIN
client q1
ON q1.uid = d.uid
LEFT JOIN
client q2
ON q2.uid = d.uid
AND q2.winning =1
GROUP BY
d.name, d.created
ORDER BY
cnt DESC
LIMIT 0, 10
If uid
is a PRIMARY KEY
, you can rewrite it like this:
SELECT d.name, d.created, SUM(payout) AS psum, COUNT(IF(winning = 1, uid, NULL)) AS cnt
FROM client d
GROUP BY
d.name, d.created
ORDER BY
cnt DESC
LIMIT 0, 10