Oracle SQL Frage

Irgendwer

Irgendwer

Aktives Mitglied
Thread Starter
Dabei seit
25.08.2007
Beiträge
671
Reaktionspunkte
53
Hi,

haben heute ein Beispiel bekommen wie nächste Woche die Wiederholung ablaufen könnte. Bin natürlich daran interessiert dies zu lösen wo ich aber gerade nicht wirklich weiter komme..

Hier die Angabe:

Gegeben ist eine Tabelle Spieler mit den Attributen Name, Vorname, Punkte

Ausgegeben werden soll: Rang, Name, Punkte
Rang ist also 1-x wobei der 1. Rang der ist, der die meisten Punkte hat.
Das ganze sortiert nach Rang (also 1/2/3/4 etc...)

Mein Problem ist jetz, wo krieg ich das Rang her?

MfG
 
Wenn Du nach Punkten DESC (absteigend) sortierst ergibt der Rang sich doch automatisch, oder ?
 
Das schon, doch wo krieg ich den Attribut "RANG" her, da der nicht gegeben ist
 
Hi,

mit Rownum:
Code:
select rownum "Rang" ,name,vorname,punkte from spieler
 
Muss der Fall berücksichtigt werden, dass zwei Spieler punktgleich sind?
Wenn ja, dann reicht die "rownum" Lösung nicht...
 
ist es eigentlich so schwer sich an die gegebene Struktur eines Forums zu halten :rolleyes:

Da gehört sowas hinein:

https://www.macuser.de/forum/f59/


in der Bar sollte man auf Fachfragen gar nicht mehr eingehn!
 
ich war schon vor einer halebn Stunde dabei - nur WEB Datenbank ist nirgendwo erwaehnt :)
 
behaupte doch einfach, dass deine SQL Anwendung ein WEB Interface hat - dann kann ich den Thread in die WEB Datenbankprogrammierung verschieben :)
 
Irgendwer schrieb:
Ich hatte nur Datenbankprogramme gefunden

Oracle ist ein Datenbankprogramm ;)

Das die hier bei Macuser nur unter Web-Programmierung stehen ist unglücklich, wurde aber leider nie geändert. Denn in der Tat kann man eine DB wie Oracle,Postgres oder MySQL überall einsetzen und nicht nur fürs Web.

Tja das ist hier historisch so gewachsen und ließ sich leider nicht ändern. Wenn Du Dir die Fragen im Forum ansiehst geht es dort nur um SQL, Relationen, Tabellen und vielleicht mal um die Adressierung einer DB aus einer (Web-) Programmiersprache heraus.
 
Hi,

mit Rownum:
Code:
select rownum "Rang" ,name,vorname,punkte from spieler

Ich hab das jetzt so gemacht:

Code:
select rownum "Rang" , name, punkte 
from spieler
order by punkte desc

Ausgabe:
Code:
Rang	NAME	PUNKTE
3	Claus	9
1	Horst	5
2	Hans	2

Wie krieg ich jetz noch die Rang Spalte richtig?

@dkreutz: Das ist nicht ausdrücklich gefragt aber mich würde es schon interessieren wie es in diesem Fall dann funktionieren würde

Ps: Vielleicht erbarmt sich ja ein Mod das zu verschieben^^
 
Hallo,

vielleicht hiflt

SELECT rownum "Rang" , name, punkte FROM spieler
ORDER BY "Rang" desc

weiter?

Viele Grüße
 
ORDER BY ROWNUM wäre ja eine chronologische Tabellenausgabe!

irgendwer schrieb:
select rownum "Rang" , name, punkte
from spieler
order by punkte desc

Im Grunde ist das ja schon die Lösung. Der Rang ist implizit enthalten weil die erste Zeile des Ergebnisses den ersten Rang liefert u.s.w. . Rownum ist hier falsch, weil das offenbar die Nummer der Zeile in der Tabelle ist und gerade darum geht es ja nicht.

Was Du willst ist explizit einen Zähler mitführen, den Du ja implizit schon durch die Reihenfolge der Abfrage hast.
 
Schon probiert, das Problem dabei scheint das ROWNUM die Reihen eben durchnummeriert wie ich sie in die Tabelle eingetragen habe:

Name Vorname Punkte
Fuchs Horst 5
Hanslinger Hans 2
Clausinger Claus 9

Und genau in der Reihenfolge wird das dann eben Nummeriert: Horst = 1, Hans = 2, Claus = 3

ORDER BY ROWNUM wäre ja eine chronologische Tabellenausgabe!

Zitat:
Zitat von irgendwer
select rownum "Rang" , name, punkte
from spieler
order by punkte desc
Im Grunde ist das ja schon die Lösung. Der Rang ist implizit enthalten weil die erste Zeile des Ergebnisses den ersten Rang liefert u.s.w. . Rownum ist hier falsch, weil das offenbar die Nummer der Zeile in der Tabelle ist und gerade darum geht es ja nicht.

Was Du willst ist explizit einen Zähler mitführen, den Du ja implizit schon durch die Reihenfolge der Abfrage hast.

Und das funktioniert wie? ^^
 
Da gibt es folgende Varianten:

Weist gleiche Punktzahl als identischen Rang aus und führt den Rang "überspringend" weiter (1, 2, 3, 3, 5):
Code:
select rank() over (order by punkte desc) as rang, name, punkte
from spieler
order by punkte desc

Weist gleiche Punktzahl als identischen Rang aus und führt den Rang "weiterführend" weiter (1, 2, 3, 3, 4):
Code:
select dense_rank() over (order by punkte desc) as rang, name, punkte
from spieler
order by punkte desc

Weist gleiche Punktzahl als verschiedene Ränge aus (1, 2, 3, 4, 5):
Code:
select row_number() over (order by punkte desc) as rang, name, punkte
from spieler
order by punkte desc
 
Zuletzt bearbeitet:
So, Danke an alle hab das jetzt so gelöst:

SELECT RANK () OVER (order by punkte desc) rang, name, punkte
FROM spieler
 
Zurück
Oben Unten