|
|
| Strana 15 (CASE v SELECT) | Sbírka příkladů SQL dotazů | Strana 17 (duplicity v záznamech) |
Příklad 24
Zadání: Zjistěte, která firma má nejvyšší obrat
Popis řešení: Příklad se zdá jednodušší, než je ve skutečnosti. Musí se totiž provést dvě agregační funkce (nejprve SUM a poté z výsledku MAX).
SQL:
SELECT *
FROM (SELECT SUM(Faktury.castka) AS suma,Firmy.nazev
FROM Firmy, Faktury
WHERE Faktury.firma=Firmy.cislo
GROUP BY Firmy.nazev)
WHERE suma=(SELECT MAX(suma)
FROM (SELECT SUM(Faktury.castka) AS suma
FROM Faktury
GROUP BY Faktury.firma)
)
602SQL verze 8 disponuje klauzulí LIMIT, která dotaz podstatně zjednoduší:
SQL:
SELECT SUM(Faktury.castka) AS suma,Firmy.nazev FROM Firmy, Faktury WHERE Faktury.firma=Firmy.cislo GROUP BY Firmy.nazev ORDER BY suma DESC LIMIT 1
Poznámky:
a) V příkladu je použito výběru prvního záznamu z dotazu obsahujícího firmy sestupně setříděné podle obratu.
b) Výsledkem je vždy jeden záznam, i když by dvě a více firem mělo stejný obrat. V tomto případě není definováno, která z firem bude vybrána.
Příklad 24 - ext.
Pokud bychom chtěli vytvořit editovatelný dotaz obsahující všechny informace o firmě s největším obratem, můžeme např. použít tuto konstrukci:
SQL:
SELECT *
FROM (SELECT SUM(Faktury.castka) AS suma, Faktury.firma
FROM Faktury
GROUP BY Faktury.firma
ORDER BY suma DESC
LIMIT 1) As MaxObrat, Firmy
WHERE Firmy.cislo=MaxObrat.firma
Poznámky:
a) První operand joinu je pomocí LIMITu vybrané číslo firmy, joinem je připojená tabulka firem
b) Použití klauzule LIMIT uvnitř subdotazu nešlo použít vždy - až po úpravě optimalizátoru ve verzi 8.1b (28) a 9.0.05.0527
| Strana 15 (CASE v SELECT) | Sbírka příkladů SQL dotazů | Strana 17 (duplicity v záznamech) |