[英]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
如果uid
是PRIMARY KEY
,你可以像这样重写它:
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
SELECT d.name, d.created, SUM(d.payout) AS allpayout, COUNT(alt.uid) as cnt
FROM client AS d
LEFT JOIN client AS alt
ON alt.uid = d.uid AND alt.winning = 1
GROUP BY d.name, d.created
ORDER BY cnt DESC
LIMIT 0, 10
SELECT d.name, d.created, SUM( d.payout ) AS payout, SUM( IF( d.winning = 1, 1, 0 ) ) AS cnt
FROM client AS d
GROUP BY
d.name, d.created
ORDER BY cnt DESC LIMIT 0 , 10;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.