Heim >Datenbank >MySQL-Tutorial >Warum gibt mein SQL COUNT(*) die Gesamtzahl anstelle der einzelnen Zeilenanzahlen zurück?
SQL-Abfrage gibt die Gesamtzeilenanzahl statt der einzelnen Zeilenanzahl zurück
Achten Sie beim Ausführen von SQL-Abfragen darauf, Aggregatfunktionen wie COUNT(*) korrekt zu verwenden, um falsche Ergebnisse zu vermeiden. Betrachten Sie die folgende Aussage:
<code class="language-sql">SELECT `ID`, `To`, `Poster`, `Content`, `Time`, ifnull(`Aura`, 0) AS `Aura` FROM ( SELECT DISTINCT * FROM messages m INNER JOIN ( SELECT Friend2 AS Friend FROM friends WHERE Friend1 = '1' UNION ALL SELECT Friend1 AS Friend FROM friends WHERE Friend2 = '1' ) friends ON m.Poster = friends.`Friend` UNION ALL SELECT DISTINCT *, '1' FROM messages WHERE `Poster` = '1' ) var LEFT JOIN ( SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura` FROM messages_aura ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus) GROUP BY `ID`, `Poster` ORDER BY `Time` DESC LIMIT 10;</code>
Das Ziel dieser Abfrage besteht darin, Daten aus den Tabellen messages
und messages_aura
abzufragen und die Anzahl der Vorkommen von Aura-Nachrichten für jeden Benutzer zu zählen. Das Problem liegt jedoch in der Unterabfrage LEFT JOIN
, wo die Klausel GROUP BY
fehlt.
Problem: Ohne die GROUP BY
-Klausel gibt die Unterabfrage die Gesamtzahl der Aura-Nachrichten für alle Benutzer zurück, anstatt die Anzahl für jeden Benutzer zu zählen. Infolgedessen zeigt die Ausgabe falsche Zählungen an, da alle Zeilen aggregiert werden, anstatt nach relevanten Spalten zu gruppieren.
Lösung: Um dieses Problem zu lösen, muss die GROUP BY
-Klausel zur LEFT JOIN
-Unterabfrage hinzugefügt werden:
<code class="language-sql">LEFT JOIN ( SELECT `ID` AS `AuraID`, `Status` AS `AuraStatus`, COUNT(*) AS `Aura` FROM messages_aura GROUP BY AuraID, AuraStatus ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
Durch das Hinzufügen von GROUP BY AuraID, AuraStatus
gruppiert die Unterabfrage nun die Ergebnisse nach diesen Spalten und stellt so sicher, dass die Aura-Anzahl für jeden Benutzer korrekt ist.
Das obige ist der detaillierte Inhalt vonWarum gibt mein SQL COUNT(*) die Gesamtzahl anstelle der einzelnen Zeilenanzahlen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!