Eindeutige Zeilenaggregation in MySQL mit sum()
SQL-Abfragen beinhalten oft Aggregatfunktionen wie sum(), um numerische Zusammenfassungen zu berechnen. Beim Umgang mit gruppierten Daten ist es wichtig, jeden eindeutigen Datensatz nur einmal zu zählen, um überhöhte Ergebnisse zu vermeiden.
Bedenken Sie die folgende Abfrage:
<code class="sql">SELECT links.id, count(DISTINCT stats.id) as clicks, count(DISTINCT conversions.id) as conversions, sum(conversions.value) as conversion_value FROM links LEFT OUTER JOIN stats ON links.id = stats.parent_id LEFT OUTER JOIN conversions ON links.id = conversions.link_id GROUP BY links.id ORDER BY links.created desc;</code>
Das Ziel besteht darin, die Anzahl der eindeutigen Klicks zu zählen , Conversions und summieren Sie die entsprechenden Conversion-Werte für jeden Link. Aufgrund der Gruppierung zählt die sum(conversions.value)-Aggregation jedoch jeden Conversion-Wert mehrmals.
Um die Summe für jede einzelne Conversion genau zu berechnen, müssen wir den Ausdruck anpassen. Unter der Annahme, dass „conversions.id“ der Primärschlüssel in der Conversions-Tabelle ist, können wir die Beziehung zwischen der Anzahl der einzelnen Conversions und der Gesamtzahl der Datensätze nutzen.
Für jede „conversions.id“ gibt es höchstens einen Link .id betroffen. Daher kann die Summe aller Conversion-Werte für eine bestimmte Conversion berechnet werden, indem die tatsächliche Summe (conversions.value) mit der Anzahl der verschiedenen Conversions multipliziert und durch die Gesamtzahl der Datensätze in der Gruppe dividiert wird:
<code class="sql">sum(conversions.value) * count(DISTINCT conversions.id) / count(*)</code>
Die Einbeziehung dieser Anpassung in die Abfrage führt zu Folgendem:
<code class="sql">SELECT links.id, count(DISTINCT stats.id) as clicks, count(DISTINCT conversions.id) as conversions, sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value FROM links LEFT OUTER JOIN stats ON links.id = stats.parent_id LEFT OUTER JOIN conversions ON links.id = conversions.link_id GROUP BY links.id ORDER BY links.created desc;</code>
Diese geänderte Abfrage summiert effektiv die Conversion-Werte für jede einzelne Conversion und liefert genaue Gesamtergebnisse für gruppierte Daten.
Das obige ist der detaillierte Inhalt vonWie berechnet man die genaue Summe der Konvertierungswerte für verschiedene Konvertierungen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!