Veröffentlicht 16. März 20187 j Hallo Leute, ich bin auf der Suche nach einem SQL-Statement, der den Rang aus einer Rangliste anzeigt. In der Tabelle users wird nach xp gesucht. Ich habe mal ein Statement vorbereitet. Es soll aber nur der Rang und nicht die ganze Liste erscheinen. Könnt ihr mir helfen? SELECT xp AS Rang FROM users ORDER BY xp DESC
16. März 20187 j Im Moment selektierst du die ganze Tabelle. Wenn du einen bestimmten Wert selektieren willst, brauchst du noch ein Where Statement. Für die XP, die du ausgegeben haben willst.
16. März 20187 j vor 20 Minuten schrieb mintmaroo: Hallo Leute, ich bin auf der Suche nach einem SQL-Statement, der den Rang aus einer Rangliste anzeigt. In der Tabelle users wird nach xp gesucht. Ich habe mal ein Statement vorbereitet. Es soll aber nur der Rang und nicht die ganze Liste erscheinen. Könnt ihr mir helfen? SELECT xp AS Rang FROM users ORDER BY xp DESC Welcher Rang den genau? Zu einem bestimmten User oder was benötigst du genau?
16. März 20187 j Moin, hier kannst du Beispiele sehen wie man eine Rangliste erzeugen kann: http://www.php-rocks.de/thema/28-ranglisten-per-mysql.html
16. März 20187 j Autor Hi, es soll nur der Rang ausgeben werden. Also wenn die Tabelle so aussieht: Hans XP = 12 Peter XP = 10 Meyer XP =5 Und ich bin Meyer, dann wird nur angezeigt : 3!
16. März 20187 j Könnte funktionieren: SELECT count(*) + 1 AS rang FROM xp INNER JOIN xp AS points ON points.xp > xp.xp WHERE xp.name = 'meyer' http://sqlfiddle.com/#!9/f97fb7/3
16. März 20187 j Ich würde bei einer einzelnen Tabelle kein Join verwenden. Wie wäre es damit, die Tabelle erst nach XP absteigend zu sortieren. Und dann mit einer Where Abfrage nach zum Beispiel Meier zu suchen und über den Index die Zeilennummer und somit den Rang auszugeben?Btw ist es immer besser, wenn man nur Tipps gibt. Anstatt eine Lösung zu Posten.
16. März 20187 j Welches DBMS? Je nachdem kannst du dir mit z.B. Dense_Rank einfach eine zusätzliche Spalte mit der Position erstellen und diese zu dem User ausgegeben.
17. März 20187 j SQL ist eigentlich nicht dafür bestimmt, Analysen auf Daten zu machen. Es ist eigentlich dafür gedacht, Daten aus einer Datenbank zu lesen. Ein DBMS besitzt aber in der Regel einige analytische Funktionen. Wie @sylenz schon richtig nachfragt, ist es wichtig zu wissen, welche DBMS du verwendest, da die analytischen Funktionen immer unterschiedlich implementiert sind. Falls du MySQL verwenden solltest, könnte man erst ab 8.0 mit den Funktionen RANK() bzw. DENSE_RANK() arbeiten. Ansonsten ist die Lösung von @PVoss die präferierte Lösung, wenn es reines SQL sein soll.
22. März 20187 j MSSQL kann folgendes: Zitat SELECT RANK() OVER (ORDER BY XP), NAME FROM USERS https://docs.microsoft.com/de-de/sql/t-sql/functions/rank-transact-sql
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.