Setřídění probíhá implicitně vzestupně - ASC, nebo můžete určit setřídění sestupné - DESC.rimmer1=> SELECT * FROM zamestnanci ORDER BY prijmeni; jmeno | prijmeni | plat | oddeleni_id | rodne_cislo ---------+----------+-------+-------------+------------- Tom | Jerry | 15000 | 2 | 8001010605 Leopold | King | 13000 | 2 | 8001010607 Martin | Luter | 12000 | 2 | 8001010606 ... (10 rows) rimmer1=> SELECT * FROM zamestnanci WHERE plat >=15000 ORDER BY prijmeni; jmeno | prijmeni | plat | oddeleni_id | rodne_cislo -------+----------+-------+-------------+------------- Tom | Jerry | 15000 | 2 | 8001010605 Tomas | Mann | 22000 | 3 | 8001010608 Lenka | Pavova | 15000 | 2 | 8001010604 Vasek | Trn | 16000 | 3 | 8001010609 (4 rows)
Třídit lze podle více sloupců než podle jednoho. V následujícím SELECTu setřídíme výsledek nejdříve podle platu (setstupně) a tam, kde je plat stejný setřídíme záznam podle jména (vzestupně). Priorita třídění je dána pořadím vyjmenování sloupců za klíčovými slovy ORDER BY.rimmer1=> SELECT * FROM zamestnanci WHERE plat >=15000 ORDER BY plat DESC; jmeno | prijmeni | plat | oddeleni_id | rodne_cislo -------+----------+-------+-------------+------------- Tomas | Mann | 22000 | 3 | 8001010608 Vasek | Trn | 16000 | 3 | 8001010609 Lenka | Pavova | 15000 | 2 | 8001010604 Tom | Jerry | 15000 | 2 | 8001010605 (4 rows)
rimmer1=> SELECT * FROM zamestnanci WHERE plat >=15000 ORDER BY plat DESC,prijmeni; jmeno | prijmeni | plat | oddeleni_id | rodne_cislo -------+----------+-------+-------------+------------- Tomas | Mann | 22000 | 3 | 8001010608 Vasek | Trn | 16000 | 3 | 8001010609 Tom | Jerry | 15000 | 2 | 8001010605 Lenka | Pavova | 15000 | 2 | 8001010604 (4 rows)
rimmer1=> SELECT COUNT(plat) FROM zamestnanci;
count
-------
10
Příkaz nám vrátil počet položek, kde je uveden plat. Zkusíme přidat
zaměstnance, kde neuvedeme jeho plat. Nezapomeňte, že 0 je také
číslo, proto je třeba uvést NULL. Počet "platů" v tabulce se tím
nezmění (přestože počet řádků ano).
rimmer1=> INSERT INTO zamestnanci VALUES ('Pan','Novy',NULL,1,8001010612);
INSERT 19323 1
rimmer1=> SELECT COUNT(plat) FROM zamestnanci;
count
-------
10
(1 row)
Následující snad nepotřebuje komentář:
rimmer1=> SELECT MAX(plat) FROM zamestnanci;
max
-------
22000
(1 row)
rimmer1=> SELECT MAX(plat) AS maximalni_plat, MIN(plat) AS minimalni_plat,
rimmer1-> COUNT(plat) AS pocet_platu, AVG(plat) AS prumerny_plat
rimmer1-> FROM zamestnanci;
maximalni_plat | minimalni_plat | pocet_platu | prumerny_plat
----------------+----------------+-------------+------------------
22000 | 9000 | 10 | 13400.0000000000
(1 row)
rimmer1=> SELECT MAX(plat) AS maximalni_plat, MIN(plat) AS minimalni_plat,
rimmer1-> COUNT(plat) AS pocet_platu, AVG(plat) AS prumerny_plat
rimmer1-> FROM zamestnanci WHERE oddeleni_id = 1;
maximalni_plat | minimalni_plat | pocet_platu | prumerny_plat
----------------+----------------+-------------+------------------
12000 | 10000 | 3 | 10666.6666666667
(1 row)
rimmer1=> SELECT STDDEV(plat) FROM zamestnanci;
stddev
-----------------
3835.5066303047
(1 row)
Seskupený sloupec (a jen ten!) můžete také nechat vypsat:rimmer1=> SELECT MAX(plat), MIN(plat), COUNT(plat) FROM zamestnanci rimmer1-> GROUP BY oddeleni_id; max | min | count -------+-------+------- 12000 | 10000 | 3 15000 | 12000 | 4 22000 | 9000 | 3 (3 rows)
rimmer1=> SELECT oddeleni_id, MAX(plat), MIN(plat), COUNT(plat), STDDEV(plat)
rimmer1-> FROM ZAMESTNANCI GROUP BY oddeleni_id;
oddeleni_id | max | min | count | stddev
-------------+-------+-------+-------+-----------------
1 | 12000 | 10000 | 3 | 1154.7005383793
2 | 15000 | 12000 | 4 | 1500.0000000000
3 | 22000 | 9000 | 3 | 6506.4070986477
(3 rows)
A ještě jeden příklad na závěr:
rimmer1=> SELECT oddeleni_id, MAX(plat), MIN(plat), COUNT(plat)
rimmer1-> FROM zamestnanci WHERE oddeleni_id !=3 GROUP BY oddeleni_id
rimmer1-> ORDER BY max DESC;
oddeleni_id | max | min | count
-------------+-------+-------+-------
2 | 15000 | 12000 | 4
1 | 12000 | 10000 | 3
(3 rows)
Poznámka: Pořadí WHERE ... GROUP BY .. ORDER BY nelze zaměňovat.
rimmer1=> SELECT oddeleni_id, MAX(plat), MIN(plat), COUNT(plat)
rimmer1-> FROM zamestnanci WHERE oddeleni_id <> 1 GROUP BY oddeleni_id;
oddeleni_id | max | min | count
-------------+-------+-------+-------
2 | 15000 | 12000 | 4
3 | 22000 | 9000 | 3
(2 rows)
rimmer1=> SELECT oddeleni_id, MAX(plat), MIN(plat), COUNT(plat)
rimmer1-> FROM zamestnanci GROUP BY oddeleni_id HAVING oddeleni_id <> 1;
oddeleni_id | max | min | count
-------------+-------+-------+-------
2 | 15000 | 12000 | 4
3 | 22000 | 9000 | 3
(2 rows)
V následujícím příkladě zobrazíme jen ta oddělení, kde je maximální
plat větší jak 15000. Maximální platy se zjistí až po použití
příkazu GROUP BY, proto není možné tuto konstrukci vytvořit pomocí
WHERE!
rimmer1=> SELECT oddeleni_id, MAX(plat),MIN(plat), COUNT(plat)
rimmer1-> FROM zamestnanci GROUP BY oddeleni_id HAVING MAX(plat) > 15000;
oddeleni_id | max | min | count
-------------+-------+------+-------
3 | 22000 | 9000 | 3
(1 row)
Poznámka: příkaz OFFSET lze použít i bez příkazu LIMIT.rimmer=> SELECT * FROM zamestnanci ORDER BY prijmeni LIMIT 3; jmeno | prijmeni | plat | oddeleni_id | rodne_cislo ---------+----------+-------+-------------+------------- Tom | Jerry | 15000 | 2 | 8001010605 Leopold | King | 13000 | 2 | 8001010607 Martin | Luter | 12000 | 2 | 8001010606 (3 rows) rimmer=> SELECT * FROM zamestnanci ORDER BY prijmeni LIMIT 3 OFFSET 2; jmeno | prijmeni | plat | oddeleni_id | rodne_cislo --------+----------+-------+-------------+------------- Martin | Luter | 12000 | 2 | 8001010606 Jana | Mala | 12000 | 1 | 8001010603 Tomas | Mann | 22000 | 3 | 8001010608 (3 rows)
