Oracle hat 2 Funktionen - Rang() und Dichte_Rank() - die ich sehr nützlich für einige Anwendungen gefunden habe. Ich mache jetzt etwas in Mysql und habe mich gefragt, ob sie etwas Ähnliches haben?MySQL Äquivalent von ORACLES rank()
3
A
Antwort
3
Nichts direkt äquivalent, aber Sie können es mit einigen (nicht sehr effizienten) Self-Joins vortäuschen. Einige Beispielcode von einem collection of MySQL query howtos:
SELECT v1.name, v1.votes, COUNT(v2.votes) AS Rank
FROM votes v1
JOIN votes v2 ON v1.votes < v2.votes OR (v1.votes=v2.votes and v1.name = v2.name)
GROUP BY v1.name, v1.votes
ORDER BY v1.votes DESC, v1.name DESC;
+-------+-------+------+
| name | votes | Rank |
+-------+-------+------+
| Green | 50 | 1 |
| Black | 40 | 2 |
| White | 20 | 3 |
| Brown | 20 | 3 |
| Jones | 15 | 5 |
| Smith | 10 | 6 |
+-------+-------+------+
0
wie über dieses "DENSE_RANK implementieren" in MySQL
CREATE TABLE `person` (
`id` int(11) DEFAULT NULL,
`first_name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` char(1) DEFAULT NULL);
INSERT INTO `person` VALUES
(1,'Bob',25,'M'),
(2,'Jane',20,'F'),
(3,'Jack',30,'M'),
(4,'Bill',32,'M'),
(5,'Nick',22,'M'),
(6,'Kathy',18,'F'),
(7,'Steve',36,'M'),
(8,'Anne',25,'F'),
(9,'Mike',25,'M');
die Daten vor DENSE_RANK() ähnliche
mysql> select * from person;
+------+------------+------+--------+
| id | first_name | age | gender |
+------+------------+------+--------+
| 1 | Bob | 25 | M |
| 2 | Jane | 20 | F |
| 3 | Jack | 30 | M |
| 4 | Bill | 32 | M |
| 5 | Nick | 22 | M |
| 6 | Kathy | 18 | F |
| 7 | Steve | 36 | M |
| 8 | Anne | 25 | F |
| 9 | Mike | 25 | M |
+------+------------+------+--------+
9 rows in set (0.00 sec)
die Daten nach DENSE_RANK () so, einschließlich "Partition durch" Funktion
+------------+--------+------+------+
| first_name | gender | age | rank |
+------------+--------+------+------+
| Anne | F | 25 | 1 |
| Jane | F | 20 | 2 |
| Kathy | F | 18 | 3 |
| Steve | M | 36 | 1 |
| Bill | M | 32 | 2 |
| Jack | M | 30 | 3 |
| Mike | M | 25 | 4 |
| Bob | M | 25 | 4 |
| Nick | M | 22 | 6 |
+------------+--------+------+------+
9 rows in set (0.00 sec)
die Abfrageanweisung ist
select first_name,t1.gender,age,FIND_IN_SET(age,t1.age_set) as rank from person t2,
(select gender,group_concat(age order by age desc) as age_set from person group by gender) t1
where t1.gender=t2.gender
order by t1.gender,rank
Verwandte Themen
- 1. Oracle Äquivalent des TEXT-Typs von MySQL
- 2. SQL Server-Äquivalent von MySQL USING
- 3. Microsoft Access Äquivalent von erklären in MySQL
- 4. erhöhen ohloh rank
- 5. db-optimierung: computing rank
- 6. Google - Keyword Rank Checker
- 7. Rank Studenten in Abhängigkeit von ihrer Klasse
- 8. Was ist der Zweck von std :: rank?
- 9. Oracle-Datenbank-Link - MySQL-Äquivalent?
- 10. MySQL IFNULL Äquivalent für PHP
- 11. Retrieve and Rank Python: Welche Art von "Antwortdaten" wird an die Rank-Methode übergeben?
- 12. GROUP_CONCAT MySQL-Funktion Äquivalent in Oracle
- 13. ROW_NUMBER() Äquivalent in MySQL zum Einfügen
- 14. Gibt es ein MySQL-Äquivalent von PHP's preg_replace?
- 15. Äquivalent von MySQL ON DUPLICATE KEY UPDATE in Sql Server
- 16. Äquivalent in MySQL zu MS SQL Jobs?
- 17. MySQL, koaleszieren Äquivalent für leere Werte?
- 18. SQL Server äquivalent zu MySQL EXPLAIN
- 19. SQL RANK() über PARTITION auf verknüpften Tabellen
- 20. Rank & Retrieve, eine Verbindung fehlgeschlagen gateway.watsonplatform.net
- 21. Google Official API für Page Rank
- 22. Alexa Rank zu Traffic Estimation Formel
- 23. Schnelle Hilfe mit RANK über mehrere Variablen
- 24. t-sql re-rank wenn Gruppenfeld ändert
- 25. Kind vs Rank in der Typentheorie
- 26. Android SQLite Äquivalent der angegebenen Update-Abfrage
- 27. jQuery-Äquivalent von querySelector
- 28. C# Äquivalent von Perl $ _
- 29. sh Äquivalent von __FILE__
- 30. iPhone-Äquivalent von -doCommandBySelector :?
Ich wünsche es eine bessere Lösung, aber diese haben – giroy
@ younes0 tun: Wenn Sie auf Weiß und Brown schauen, sehen Sie, dass es (richtig) ist platzieren ein Unentschieden auf Rang 3, dann überspringen auf Rang 5. – chaos
@chaos okay, also denke ich, dass das Springen zu Rang 5 ist Oracle Rang() Standardverhalten – younes0