2009-08-20 2 views
1

Как изменить следующий зависимый подзапрос на самостоятельное соединение?зависимый подзапрос для самостоятельного присоединения

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; 

ответ

3
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 
1
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 
+0

да, взял мой комментарий назад. СРЮ. –

0
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;