Rangsimulation mit MySQL zur Auswahl der Top-n-Maximalwerte
Die Auswahl der Top-n-Maximalwerte aus einer Tabelle kann insbesondere in MySQL eine Herausforderung sein wenn das gewünschte n größer ist als die Anzahl der unterschiedlichen Gruppen in der Tabelle.
Annäherung der Top-n-Maximalwerte Mithilfe einer Union-Abfrage
Für n=2 können wir die gewünschte Ausgabe mithilfe einer Union-Abfrage annähern:
SELECT max(column1) m FROM table t GROUP BY column2 UNION SELECT max(column1) m FROM table t WHERE column1 NOT IN (SELECT max(column1) WHERE column2 = t.column2)
Diese Abfrage ermittelt zuerst den Maximalwert für jede Gruppe und dann findet den zweiten Maximalwert aller Werte, die nicht bereits der Maximalwert einer Gruppe sind.
Rang verwenden Simulationen
Für jedes n können wir Rang über Partition mithilfe der an anderer Stelle beschriebenen Techniken simulieren. Ein solcher Ansatz besteht darin, eine Unterabfrage zu verwenden, die den n-ten Maximalwert für jede Gruppe zurückgibt:
SELECT t.* FROM (SELECT grouper, (SELECT val FROM table li WHERE li.grouper = dlo.grouper ORDER BY li.grouper, li.val DESC LIMIT 2,1) AS mid FROM ( SELECT DISTINCT grouper FROM table ) dlo ) lo, table t WHERE t.grouper = lo.grouper AND t.val > lo.mid
In dieser Abfrage setzt LIMIT 2,1 den n-Wert auf 2. Ersetzen Sie Grouper durch die Gruppierungsspalte name und val mit dem Wertspaltennamen in Ihrem spezifischen Szenario.
Das obige ist der detaillierte Inhalt vonWie simuliere ich den Rang in MySQL, um die Top-n-Maximalwerte auszuwählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!