Benjamin: SQL ausgabe von 3 rows ohne limit

Hi

ich habe ein problem habe eine aufgabe gestellt bekommen die ich nicht lösen kann :/

in meiner datenbank ist eine tabele "Stadt" mit der spalte "einwohner":

Stadt
---------
einwohner
---------
  2345
  1233
  2311
  821
  442
  3122

nun soll ich die 3 höchsten werte ausgeben und darf kein LIMIT benutzen

mit limit währe es einfach aber es "soll" noch anders gehen einer eine idee wie?

  1. nun soll ich die 3 höchsten werte ausgeben und darf kein LIMIT benutzen

    Du könntest dreimal mit MAX() auf die Tabelle gehen, dabei sind aber Unterabfragen erforderlich.

  2. Sup!

    Wuuaaah... das ist schon alles so lange her... aber vielleicht kann man alle die Einwohnerzahlen ausgeben, für die gilt, dass die Zahl der grösseren Einwohnerzahlen <=2 ist?

    Also in meinem Phantasie-SQL-Dialekt:

    Select * from Einwohnerzahlen into var where (count (Einwohnerzahlen > var) < 2);

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
    1. Sup!

      Wuuaaah... das ist schon alles so lange her... aber vielleicht kann man alle die Einwohnerzahlen ausgeben, für die gilt, dass die Zahl der grösseren Einwohnerzahlen <=2 ist?

      Also in meinem Phantasie-SQL-Dialekt:

      Select * from Einwohnerzahlen into var where (count (Einwohnerzahlen > var) < 2);

        
      SELECT  
       DF AS Vergleichwert  
      FROM  
       DT  
      WHERE  
       (  
        (  
        SELECT  
         COUNT(*)  
        FROM  
         DT  
        WHERE  
         (  
         DF > Vergleichswert  
         )  
        )  
        =  
        2  
       )  
      
      

      Geht sowas? Kriegt man so den dritten Datensatz?  ;)

      1. also das muss rein sql sein .. wenn ich das in phpmyadmin eingebe soll der mir 3 zeilen anzeigen :) .. und thx ich probier das mal aus

        1. HAB GESCHAFT .. Big THX :)

          habs gerde mal in phpmyadmin getestet und es funktioniert !

          SELECT Einwohner AS var
          FROM Stadt
          WHERE (
          (

          SELECT COUNT( * )
          FROM Stadt
          WHERE (
          Einwohner > var
          )
          ) =2
          )
          OR (
          (

          SELECT COUNT( * )
          FROM Stadt
          WHERE (
          Einwohner > var
          )
          ) =1
          )
          OR (
          (

          SELECT COUNT( * )
          FROM Stadt
          WHERE (
          Einwohner > var
          )
          ) =0
          )

          vllt gibs ne elegantere schreibweise dafür ? :P

          1. yo,

            vllt gibs ne elegantere schreibweise dafür ? :P

            versuch mal folgendes:

            SELECT Einwohner AS var
            FROM Stadt
            WHERE
             (
             SELECT COUNT(*)
             FROM Stadt
             WHERE Einwohner > var
             )  IN (0,1,2)
            ;

            btw. als Bonus der aufgabe kannst du ihnen ja sagen, dass die abfrage nur funktioniert, wenn es bei den ersten drei keine städte mit gleicher einweohnerzahl gibt.

            Ilja

            1. jo thx :)

              geht und ... sieht auch wesendlich besser aus :)

      2. Sup!

        Also mit Oracle ging das irgendwie damals. Da ging so einiges.

        Gruesse,

        Bio

        --
        Never give up, never surrender!!!