MySQL: Agregační funkce

Pracovní data jsou na konci příspěvku.

Slouží často k statistickým výběrovým dotazům. Běžně se používají na místě výběru pole.

  • COUNT – počet záznamů
  • SUM – součet hodnot (čísla)
  • AVG – průměr hodnot (čísla)
  • MIN – nejmenší hodnota (čísla)
  • MAX – největší hodnota (čísla)
  • IF – podmínka při agregaci (v logických případech, kdy nelze provést WHERE)

Počet

SELECT COUNT(`odpoved`) AS `počet` FROM `hlasovani`

Pokud použijeme funkci AS, výsledek agregační funkce bude přístupný pod indexem (název pole) počet.

Počet s využitím seskupení

Často ale potřebujeme data kategorizovat podle určité hodnoty jiného sloupce. K tomu slouží příkaz pro seskupení počítaných dat pomocí GROUP BY. Tento parametr výběru se ale tentokrát musí umístit za výběr tabulky (podobně jako WHERE).

SELECT `ip`, COUNT(`odpoved`) AS `počet` FROM `hlasovani` GROUP BY `ip`

Distinct

Jindy zase potřebujeme pouhý výčet hodnot, které se sice v poli opakují, ale ve výběru je chceme zobrazit bez opakování – DISTINCT. Tento parametr se zase používá před výběrem pole.

SELECT DISTINCT `ip` FROM `hlasovani`

Podmínka IF při výběru pole

Použití je podobné jako u tabulkového kalkulátoru MS Excel. Funkce obsahuje 3 argumenty (logický výraz, výstup při splnění výrazu, výstup při nesplnění výrazu).

SELECT IF(`odpoved`=2,'WOFF',0) AS `odpovědi` FROM `hlasovani`

Dotaz vrátí pole odpovědi tak, že pokud se v poli odpověď nachází hodnota 2, ihned vrací řetězec WOFF, v jiném případě vrací 0.

Toho se dá využít například při analýze hodnot a v kombinaci s další agregační funkcí vracet například počty podle hodnoty.

SELECT COUNT(IF(`odpoved`=1,1,NULL)) AS `jedničky`, COUNT(IF(`odpoved`=2,1,NULL)) AS `dvojky`, COUNT(IF(`odpoved`=3,1,NULL)) AS `trojky`, COUNT(IF(`odpoved`=4,1,NULL)) AS `čtyřky`, COUNT(IF(`odpoved`=5,1,NULL)) AS `pětky` FROM `hlasovani`

S názvy polí lze provádět i aritmetické operace. To si ale ukážeme jindy.


--
-- Struktura tabulky `hlasovani`
--

CREATE TABLE `hlasovani` (
  `id` int(10) UNSIGNED NOT NULL,
  `nazev_hlasovani` varchar(20) NOT NULL,
  `odpoved` tinyint(4) NOT NULL,
  `ip` varchar(20) DEFAULT NULL,
  `cas` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Vypisuji data pro tabulku `hlasovani`
--

INSERT INTO `hlasovani` (`id`, `nazev_hlasovani`, `odpoved`, `ip`, `cas`) VALUES
(1, 'hry', 2, '77.123.231.2', '2020-10-07 12:08:43'),
(2, 'hry', 1, '127.0.0.1', '2020-10-07 12:16:12'),
(3, 'hry', 5, '127.0.0.1', '2020-10-13 06:56:24'),
(4, 'hry', 5, '127.0.0.1', '2020-10-13 06:56:26'),
(5, 'hry', 5, '127.0.0.1', '2020-10-13 06:56:28'),
(6, 'hry', 3, '127.0.0.1', '2020-10-13 06:56:29'),
(7, 'hry', 5, '127.0.0.1', '2020-10-13 06:56:30'),
(8, 'hry', 5, '127.0.0.1', '2020-10-13 06:56:30'),
(9, 'hry', 3, '127.0.0.1', '2020-10-13 06:56:31'),
(10, 'hry', 2, '127.0.0.1', '2020-10-13 06:56:32'),
(11, 'hry', 4, '127.0.0.1', '2020-10-13 06:56:33'),
(12, 'hry', 4, '127.0.0.1', '2020-10-13 06:56:33'),
(13, 'hry', 4, '127.0.0.1', '2020-10-13 06:56:34'),
(14, 'hry', 1, '127.0.0.1', '2020-10-13 06:56:35'),
(15, 'hry', 1, '127.0.0.1', '2020-10-13 06:56:35'),
(16, 'hry', 2, '127.0.0.1', '2020-10-13 06:56:36'),
(17, 'hry', 1, '127.0.0.1', '2020-10-13 06:56:36'),
(18, 'hry', 1, '127.0.0.1', '2020-10-13 07:19:47'),
(19, 'hry', 1, '127.0.0.1', '2020-10-13 07:19:48'),
(20, 'hry', 2, '127.0.0.1', '2020-10-13 07:19:50'),
(21, 'hry', 2, '::1', '2020-10-13 07:19:57'),
(22, 'hry', 3, '::1', '2020-10-13 07:20:01'),
(23, 'hry', 3, '::1', '2020-10-13 07:20:03'),
(24, 'hry', 3, '::1', '2020-10-13 07:20:04'),
(25, 'hry', 3, '::1', '2020-10-13 07:20:04'),
(26, 'hry', 3, '::1', '2020-10-13 07:20:05'),
(27, 'hry', 3, '::1', '2020-10-13 07:20:06');

--
-- Klíče pro exportované tabulky
--

--
-- Klíče pro tabulku `hlasovani`
--
ALTER TABLE `hlasovani`
  ADD UNIQUE KEY `id` (`id`);

--
-- AUTO_INCREMENT pro tabulky
--

--
-- AUTO_INCREMENT pro tabulku `hlasovani`
--
ALTER TABLE `hlasovani`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=28;
COMMIT;

Napsat komentář