Zkouska 26.5. - SQL dotazy, oddeleni s ER modelem pro piraty

beny at 2009-06-02 17:11:48

Ahoj!
Chtel jsem se zeptat lidi, kteri psali zkouskovou pisemku 26.5. a meli oddeleni se somalskymi piraty, jestli by tady nemohli napsat SQL dotazy z druheho prikladu. Tedy dotazy na 1)dvojice rok a prepad, kde prepad je nejvynosnejsim prepadem roku a 2)jmeno ziveho pirata, ktery prepadl nejvetsi pocet americkych lodi.
Diky za jakoukoli odpoved!;-)

Him at 2009-06-08 20:49:26

1] Nejvynosnejsi prepady za jednotliva leta (z hlediska sumy vykupneho)

   SELECT Lod.Nazev, tab1.Datum, Max(suma)
   FROM 
     ( -- zjistim si, kolik ziskali pirati na danem prepadu
       SELECT Prepad.Datum, Prepad.LodID, Sum(SkutecneVykupne) AS suma 
       FROM Prepad NATURAL JOIN UnosOsoby
       WHERE UnosOsoby.JeZajmut = FALSE          -- uz je propusten za vykupne
       GROUP BY Prepad.Datum, Prepad.LodID 
     ) AS tab1, Lod
   WHERE Lod.ID = tab1.LodID 
   GROUP BY GetYear(tab1.datum)

Budu rad za feedback, co na to rikas - je to dobre / spatne :)

Attachments:

  • shot00031

Wideman at 2009-06-09 23:32:21

Je to sice silně OT, ale protože jsem zrovna tuhle verzi testu psal, tak jsem to nemohl přejít: http://technet.idnes.cz/v-praze-vznika- ... chnika_nyv Třeba jsme svými ER modely přispěli k tvorbě tohoto systému a ani o tom nevíme. To přece nemůže bejt náhoda. :D

zbytovsky at 2011-01-12 11:27:36

ad 1) tohle by určitě nefungovalo, protože když použijeme GROUP BY xxxx, v SELECT smí být pouze xxx a libovolné agregační funkce.

Na cvičení jsme to tuším řešili (nestandardně) přes LIMIT:

   SELECT Lod.Nazev, Year(tab1.Datum), suma
   FROM
     ( -- zjistim si, kolik ziskali pirati na danem prepadu
       SELECT Prepad.Datum, Prepad.LodID, Sum(SkutecneVykupne) AS suma
       FROM Prepad NATURAL JOIN UnosOsoby
       WHERE UnosOsoby.JeZajmut = FALSE          -- uz je propusten za vykupne
       GROUP BY Prepad.Datum, Prepad.LodID
     ) AS tab1, Lod
   WHERE Lod.ID = tab1.LodID
   GROUP BY Year(tab1.datum)
   ORDER BY suma DESC LIMIT 1