Ergebnis 1 bis 2 von 2

Thema: SQL Abfrage mit LIMIT/TOP-Alternative

  1. #1
    sqldump ist offline Neuer Benutzer
    Registriert seit
    10.09.2011
    Beiträge
    1

    Frage SQL Abfrage mit LIMIT/TOP-Alternative

    Hallo zusammen,

    habe habe eine SQL-Query-Verständnisfrage. Ich muss einen Query aufstellen, der mir z.B. die schnellsten 3 Personen aus einer Tabelle 'rundenzeiten' ausgibt.
    Also eine TOP (k) - Abfrage. Ich darf leider keine Geschichten wie "LIMIT" oder "TOP" etc verwenden.

    Annahme Tabelle:
    'roundtime' => 'firstname', 'lastname', 'speed';
    varchar, varchar, time;

    Ich gehe davon aus, dass firstname und lastname zusammen den Primärschlüssel bilden.


    Eine funktionierender Query wäre:

    Code:
    select * from roundtime r1 where 3 >= 
    (select count(*) from roundtime r2 where r1.speed >= r2.speed)
    order by r1.speed
    Herausbekommen habe ich das durch herumspielen mit den Parameters. Literatur habe ich dazu auch gelesen, verstehe jedoch einige, wichtigen Detail nicht:

    1. Innerer SELECT: Warum muss ich hier r1.speed >= r2.speed machen, damit er mir die "schnellsten" rauswirft?
      Wörtlich hieße das doch "bei dem die äußere Geschwindigkeit (r1.speed) langsamer-gleich (>=) als die innere Geschwindigkeit (r2.speed)
    2. Äußerer SELECT: Hier muss ich "where 3 >=" schreiben, um die schnellsten 3 zu bekommen. Ich verstehe den Sinn bzgl. 3 >= nicht. Ich dachte, hier geht es quasi um das COUNT(*) aus der inneren Anweisung.

    Wäre euch sehr dankbar, wenn mir das jemand erklären könnte.

    Vielen Dank!!

    Felix

  2. #2
    castorp ist offline Erfahrener Benutzer
    Registriert seit
    27.06.2009
    Beiträge
    525

    Standard

    Eine meiner Meinung nach vermutlich bessere Lösung wäre

    Code:
    SELECT *
    FROM (
       SELECT name, 
              roundspeed,
              rank() over (order by roundspeed asc) as speed_rank
       FROM roundtime
    ) t
    WHERE speed_rank <= 3
    Damit wird für jeden Teilnehmer der "rank" bzgl der roundspeed errechnet und dann drei besten rausgefiltert.
    A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 26.01.2010, 08:37
  2. Suche Alternative zu xact_start in pg_stat_activity
    Von tigger im Forum Trigger und Funktionen
    Antworten: 11
    Letzter Beitrag: 24.11.2009, 08:31
  3. Limit offset
    Von marc9022 im Forum Programmierung
    Antworten: 2
    Letzter Beitrag: 02.11.2008, 21:42
  4. limit/offset und indexe
    Von Stefan T im Forum SQL
    Antworten: 3
    Letzter Beitrag: 15.01.2008, 12:10
  5. UPDATE und LIMIT
    Von Sy- im Forum SQL
    Antworten: 14
    Letzter Beitrag: 09.02.2006, 10:13

Berechtigungen

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

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum