sql >> Databáze >  >> RDS >> Mysql

Co může dělat agregační funkce v klauzuli ORDER BY?

Vaše výsledky budou jasnější, pokud z tabulky vyberete agregované hodnoty namísto sloupců:

SELECT SUM(id) FROM plant ORDER BY SUM(id)

Tím se vrátí součet všech ID. Toto je samozřejmě zbytečný příklad, protože agregace vždy vytvoří pouze jeden řádek, takže není třeba objednávat. Důvod, proč ve svém dotazu získáte sloupce qith řádek, je ten, že MySQL vybere jeden řádek, ne náhodně, ale ani deterministicky. Náhodou se ve vašem případě jedná o první sloupec v tabulce, ale ostatní mohou získat další řádek v závislosti na úložišti, primárních klíčích a tak dále. Agregace pouze v klauzuli ORDER BY tedy není příliš užitečná.

Co obvykle chcete udělat, je seskupení podle určitého pole a pak seřadit sadu výsledků nějakým způsobem:

SELECT fruit, COUNT(*)
FROM plant
GROUP BY fruit
ORDER BY COUNT(*)

Teď je to zajímavější dotaz! Tím získáte jeden řádek pro každé ovoce spolu s celkovým počtem pro toto ovoce. Zkuste přidat více jablek a objednávka začne dávat smysl:

Kompletní tabulka:

+----+--------+
| id | fruit  |
+----+--------+
|  1 | banana |
|  2 | apple  |
|  3 | orange |
|  4 | apple  |
|  5 | apple  |
|  6 | banana |
+----+--------+

Výše uvedený dotaz:

+--------+----------+
| fruit  | COUNT(*) |
+--------+----------+
| orange |        1 |
| banana |        2 |
| apple  |        3 |
+--------+----------+


  1. MySQL Visual Studio 2015 Již máte použitelné připojení

  2. Jak vytvořit a používat dočasnou tabulku v uložené proceduře Oracle?

  3. Jak generovat příkazy vložení z textových souborů pro tabulku SQL Server v SQL Server - SQL Server / Výukový program TSQL, část 106

  4. Jak mohu použít JOIN ve výpisu UPDATE?