Ergebnis 1 bis 20 von 26

Thema: [SQL] Eine bestimmte Zeile ausgeben

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Zitat Zitat von Whiz-zarD Beitrag anzeigen
    Moin.

    Ich habe ein kleines Problem:

    In einer SQL Übungsaufgabe soll ich die Zeile ausgeben, die in einer Spalte den fünftgrößten Wert hat. Als Server läuft Oracle Database.
    Leider unterstützt der Server nicht alle Befehle, die man auch von MySQL kennt und somit gibt es auch kein Limit-Befehl.

    Die Aufgabe selbst soll mit einer Unterabfrage gelöst werden. Ich steh da irgendwie auf dem Schlauch. Kann da vielleicht jemand ein Tipp geben?
    Ich hätte da auch aufm Schlauch gestanden, aber weil mich das gerade interessiert hat, hab ich mal gegooglet und bin erst auf diesen Blogeintrag und später auf diesen Artikel von Oracle gestoßen. Solltest du dir nicht gleich die Lösung auf dem Silbertablett präsentieren lassen wollen: Der Trick heißt wohl ROWNUM. So wie ich das verstehe, ginge das dann so:


  2. #2
    Sollte eigentlich auch ohne solche Spezialkonstrukte gehen (kann ich jetzt für Oracle natürlich nicht garantieren).

    Überleg mal, was du suchst, ist die Zeile x, wo die Anzahl der Zeilen, bei denen ein bestimmter Wert kleiner ist als der der Zeile x, 4 ist.

    Kleiner Hint: Die Anzahl zählt man mit...

    Mal die Lösung, die ich spontan auf meiner WebSeiten-Datenbank gemacht habe (Tabelle heißt hier "page", die Spalte, nach der verglichen wird, ist die page_id):

  3. #3
    Zitat Zitat von Irian Beitrag anzeigen
    Code (SQL):
     
    SELECT * FROM page p WHERE (SELECT count(*) FROM page q WHERE q.page_id < p.page_id) = 4;
     
    Ist das nicht O(N^2)?

    Ich hätte noch diese Lösung anzubieten:

    Code (SQL):
     
    SELECT col1, col2, ... 
    FROM (SELECT col1, col2, ..., ROWNUM rn 
          FROM (SELECT * 
                FROM tab 
                ORDER BY coln DESC) 
          WHERE ROWNUM < 6 )
    WHERE  rn = 5;
     


    Das sollte für große Datenbanken schneller sein, wenn ich richtig liege, ist aber weniger elegant, da die Kolumnen explizit angegeben werden müssen. Was es macht ist folgendes:

    1. Wähle alles aus tab und sortiere absteigend nach coln.
    2. Wähle die ersten 5 Reihen.
    3. Wähle die 5. Reihe.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •