Ist es möglich, GROUP BY
mehr als eine Spalte in einer MySQL- SELECT
Abfrage zu verwenden? Beispielsweise:
GROUP BY fV.tier_id AND 'f.form_template_id'
Ist es möglich, GROUP BY
mehr als eine Spalte in einer MySQL- SELECT
Abfrage zu verwenden? Beispielsweise:
GROUP BY fV.tier_id AND 'f.form_template_id'
Antworten:
GROUP BY col1, col2, col3
Ja, Sie können nach mehreren Spalten gruppieren. Beispielsweise,
SELECT * FROM table
GROUP BY col1, col2
Die Ergebnisse werden zuerst nach Spalte1 und dann nach Spalte2 gruppiert. In MySQL geht die Spalteneinstellung von links nach rechts.
GROUP BY
gilt col1+col2
. zB col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2
und Laufen GROUP BY col1,col2
würde 1,1|1,3|2,2
im Gegensatz zu 1,1|2,2
wie vorgeschlagen zurückkehren. Während GROUP BY col2, col1
würde Rückkehr die aufsteigende Reihenfolge von col2 ändern. 1,1|2,2|1,3
Demo: sqlfiddle.com/#!9/d5f69/1 Beachten Sie, dass die Zeilen-ID: 2 in beiden Fällen 2,2
trotz Invertieren der Spalten zurückgegeben wird.
GROUP BY
). Und wenn es in der ersten definierten Spalte gleiche Ergebnisse gibt, dann sortiert nur innerhalb der gleichen Ergebnisse nach der zweiten definierten Spalte
SUM
Verwendung mit GROUP BY
. Wenn GROUP BY
nur durch eine Spalte, dann sind SUM
alle Werte von jedem unterschiedlichen (unterschiedlichen) Spaltenwert sqlfiddle.com/#!9/1cbde2/2 . Wenn GROUP BY
zwei Spalten. Dann prüft mysql zunächst, ob für den Wert der ersten Spalte unterschiedliche Werte in der zweiten Spalte vorhanden sind. Wenn ja, dann mysql SUM
jeder unterschiedliche Wert der zweiten Spalte sqlfiddle.com/#!9/1cbde2/1 .
Ja, aber was bedeutet die Gruppierung nach mehr als zwei Spalten? Nun, es ist dasselbe wie das Gruppieren nach jedem einzelnen Paar pro Zeile. Die Reihenfolge, in der Sie die Spalten auflisten, ändert die Art und Weise, wie die Zeilen sortiert werden.
In Ihrem Beispiel würden Sie schreiben
GROUP BY fV.tier_id, f.form_template_id
Inzwischen der Code
GROUP BY f.form_template_id, fV.tier_id
würde ähnliche Ergebnisse liefern, aber anders sortiert.
Um ein einfaches Beispiel zu verwenden, hatte ich einen Zähler, der eindeutige IP-Adressen pro besuchten Seite einer Site zusammenfassen musste. Das ist im Grunde eine Gruppierung nach Seitennamen und dann nach IP. Ich habe es mit einer Kombination aus DISTINCT und GROUP BY gelöst.
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
Wenn Sie es vorziehen (ich muss dies anwenden), nach zwei Spalten gleichzeitig zu gruppieren, habe ich gerade diesen Punkt gesehen:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2
. Die Ergebnisse sehen normalerweise so aus die gleiche wie diese Antwort, aber die interne Ausführung ist ganz anders.
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2
. Bei einigen Daten werden falsche Ergebnisse erzielt. Sagen col1, col2
wir Werte haben: ('a_b', 'c')
in einer Zeile und ('a', 'b_c')
in einer anderen. Diese falsche Antwort mit GROUP BY CONCAT fasst die beiden Zeilen in einer zusammen. Die richtige Antwort wird nicht.
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;