Ungenaue Besuchszahlen aus mehreren LEFT JOINs verstehen
Die bereitgestellte Abfrage generiert falsche Besuchszahlen, da die sequentielle Natur mehrerer LEFT JOIN
Vorgänge zu multiplikativen und nicht zu additiven Ergebnissen führt.
Beim Beitritt zur grocery
-Tabelle werden zunächst die Lebensmittelbesuche pro Benutzer korrekt gezählt. Durch das anschließende LEFT JOIN
mit fishmarket
werden jedoch mehrere Zeilen für jeden Benutzer erstellt, wodurch die Anzahl der Lebensmittelbesuche effektiv mit der Anzahl der Fischmarktbesuche für jeden Benutzer multipliziert wird. Dies erklärt die fehlerhafte Zählung „12“ für Benutzer, die beide Geschäfte besuchen.
Die Lösung: Unterabfragen für genaue Aggregation
Das Problem wird mithilfe von Unterabfragen gelöst, um die Besuchszahlen für jedes Geschäft unabhängig zu aggregieren:
<code class="language-sql">SELECT u.id, u.account_balance, (SELECT COUNT(*) FROM grocery WHERE user_id = u.id) AS "# of grocery visits", (SELECT COUNT(*) FROM fishmarket WHERE user_id = u.id) AS "# of fishmarket visits" FROM users u ORDER BY u.id;</code>
Diese überarbeitete Abfrage zählt und zeigt Lebensmittel- und Fischmarktbesuche für jeden Benutzer genau an und liefert die korrekten aggregierten Daten.
Das obige ist der detaillierte Inhalt vonWarum führen mehrere LEFT JOINs zu falschen Besuchszahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!