Um den Median eines Datensatzes zu erhalten (z. B. das Medianeinkommen einer bestimmten Region oder eines bestimmten Unternehmens), müssen wir diese Aufgabe im Allgemeinen in drei kleine Aufgaben unterteilen:
1 Daten und geben Sie jeder Datenzeile ihren Rang unter allen Daten an.
3 Am Beispiel des monatlichen Einkommens der Mitarbeiter eines Unternehmens wird die Verwendung einiger komplexer MySQL-Anweisungen veranschaulicht.
Methode 1Erstellen Sie eine Testtabelle
Erstellen Sie zunächst eine Einkommenstabelle: CREATE TABLE IF NOT EXISTS `employee` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(10) NOT NULL DEFAULT '',
`income` INT NOT NULL DEFAULT '0'
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO `employee` (`name`, `income`)
VALUES ('麻子', 20000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('李四', 12000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('张三', 10000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('王二', 16000);
INSERT INTO `employee` (`name`, `income`)
VALUES ('土豪', 40000);
Sortieren Sie die Daten und geben Sie jeder Datenzeile ihren Rang unter allen Daten: SELECT t1.name, t1.income, COUNT(*) AS rank
FROM employee AS t1,
employee AS t2
WHERE t1.income < t2.income
OR (t1.income = t2.income AND t1.name <= t2.name)
GROUP BY t1.name, t1.income
ORDER BY rank;
Das Abfrageergebnis ist:
Führen Sie die kleine Aufgabe 2 aus
Finden Sie die mittlere Rangzahl: SELECT (COUNT(*) + 1) DIV 2 as rank
FROM employee;
Das Abfrageergebnis ist:
Schließe kleine Aufgabe 3 ab
SELECT income AS median FROM (SELECT t1.name, t1.income, COUNT(*) AS rank FROM employee AS t1, employee AS t2 WHERE t1.income < t2.income OR (t1.income = t2.income AND t1.name <= t2.name) GROUP BY t1.name, t1.income ORDER BY rank) t3 WHERE rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)
Das Abfrageergebnis ist:
Bisher , wir haben herausgefunden, wie man den Median aus einem Datensatz erhält. Methode 2Als nächstes stellen wir eine weitere Methode zur Optimierung von Ranking-Aussagen vor. Wir alle wissen, wie man einen Datensatz sortiert. In diesem Beispiel ist die Implementierungsmethode wie folgt:
SELECT name, income FROM employee ORDER BY income DESC
Das Abfrageergebnis ist:
Können wir noch einen Schritt weiter gehen und den Abfrageergebnissen eine Spalte hinzufügen? Die Daten in dieser Spalte sind das Ranking?
Wir können dieses Ziel durch 3 benutzerdefinierte Variablen erreichen:
Die erste Variable wird verwendet, um das Einkommen der aktuellen Datenzeile aufzuzeichnen.
Die zweite Variable wird verwendet, um das zu erfassen Einkommen der vorherigen Datenzeile
Die dritte Variable wird verwendet, um das Ranking der aktuellen Datenzeile aufzuzeichnen
SET @curr_income := 0; SET @prev_income := 0; SET @rank := 0; SELECT `name`, @curr_income := income AS income, @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank, @prev_income := @curr_income AS dummy FROM employee ORDER BY income DESC
Die Abfrageergebnisse lauten wie folgt:
Ermitteln Sie dann die Rangzahl des Medians und ermitteln Sie weiter das Medianeinkommen:SET @curr_income := 0; SET @prev_income := 0; SET @rank := 0; SELECT income AS median FROM (SELECT `name`, @curr_income := income AS income, @rank := if(@prev_income != @curr_income, @rank + 1, @rank) AS rank, @prev_income := @curr_income AS dummy FROM employee ORDER BY income DESC) AS t1 WHERE t1.rank = (SELECT (COUNT(*) + 1) DIV 2 FROM employee)Das Abfrageergebnis lautet: Zu diesem Zeitpunkt haben wir zwei Möglichkeiten gefunden, das Medianproblem zu lösen. Blumen bestreuen.
Empfohlen: „
MySQL-Tutorial“
Das obige ist der detaillierte Inhalt vonSo berechnen Sie den Median eines Datensatzes in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!