2017-05-26 3 views
0

Ich möchte diese Abfrage eine Summe von 0 für total zurückgeben, wenn ein Datensatz in users Tabelle nicht in securitydeposits Tabelle vorhanden ist. COALESCE funktioniert nicht für dieses Szenario. Wie würde ich darüber gehen?Summe 0, wenn keine Datensätze gefunden werden. Mysql

SELECT users.`email`, 
    COALESCE(SUM(securitydeposits.`amount_paid`),0) AS total 
FROM `users` 
LEFT JOIN `securitydeposits` 
    ON securitydeposits.user=users.email 
GROUP BY securitydeposits.`user` 
ORDER BY `total` DESC 

Antwort

0

Ich vermute, dass Ihr GROUP BY die OUTER JOIN zu einem INNER JOIN ändert.

Versuchen Sie, GROUP BY securitydeposits.user-GROUP BY users.email

0

einfach hinzuzufügen, was @Vatev sagte, Sie nicht s.user für group by verwenden können, weil die left join werden Sie null für s.user geben, die mit u.email nicht übereinstimmen. Auch wenn Sie email in Select-Klausel verwenden möchten, müssen Sie group by es auch, um korrekte Ergebnisse zu erhalten.

Versuchen Sie auch, alias für Tabellennamen als Best Practice zu verwenden, damit Sie im Rest der Abfrage auf sie verweisen können.

SELECT u.email 
,COALESCE(SUM(s.`amount_paid`),0) 
AS total 
FROM `users` u 
    LEFT JOIN `securitydeposits` s 
ON s.user=u.email 
GROUP BY u.email 
ORDER BY `total` DESC 
Verwandte Themen