Повертає дисперсію значень виразу в групі
Нижче наведені більш докладні описи всіх агрегатних функцій з конкретною інформацією про особливості використання, прикладами і допустимими типами вхідних даних. У подальших описах термін вираз означає будь-який ідентифікатор в підсумковому наборі або будь-яке дійсне вираження, яке виконує операцію з цим ідентифікатором.
При виклику агрегатної функції передається агрегатний вираз, що застосовується до записів, створеним командою SELECT. За своєю структурою агрегатні вираження схожі з звичайними виразами SQL, але вони можуть починатися з ключового слова ALL або DISTINCT.
Якщо задано ключове слово DISTINCT, функція обробляє тільки групи з унікальними значеннями агрегатного вирази; групи з повторюваними значеннями ігноруються. Ключове слово ALL, як і в команді SELECT, всього лише явно вказує на той факт, що вираз відноситься до всіх груп. У лістингу 5.19 наведені приклади різних форм агрегатних виразів.
Лістинг 5.19. Використання агрегатних виразів
booktown = # SELECT count (location) AS setjocations,
booktown- # count (ALL location) AS all_set_locations,
booktown- # count (DISTINCT location) AS unique_locations,
booktown- # count (*) AS all_rows booktown- # FROM subjects;
setjocations | all_set_locations | uniquejocations all_rows
У агрегатних виразів також є спеціальна форма, продемонстрована в стовпці al l_rows вихідних даних лістингу 5.19. Якщо при виклику агрегатної функції передається зірочка (*), це означає, що функція повинна обробляти всі поля, в тому числі і зазвичай ігноровані поля зі значеннями NULL. Оскільки таблиця subjects містить один запис з полем location, рівним NULL, результат підрахунку записів по полю 1 ocati on відрізняється від результату підрахунку за тим же нуля з використанням символу *.
Записи, у яких в агрегатний вираз входить NULL, не обробляються агрегатними функціями (винятком є функція count ().
Функція avg () отримує агрегатний вираз, результат якого відноситься до будь-якого з числових типів (numeric, bigint, smallint, real або double precision) або до типу interval.
Функція повертає середнє арифметичне всіх даних, що описуються виразом. Значення, що повертається відноситься до типу numeric для вираження типу integer або до типу double precision для вираження типу real. В інших випадках тип значення збігається з типом виразу.
booktown = # SELECT avg (cost) AS average_cost,
booktown- # avg (retail) AS average_price,
booktown- # avg (retail - cost) AS average_profit
booktown- # FROM stock:
average_cost | average_price | average_prof1t
24.8235294118 | 30.0088235294 5.1852941176
x> oktown = # SELECT avg (cost)
AS average_cost, p.name AS publisher
booktown- # FROM stock JOIN editions USING (isbn))
booktown-l JOIN publishers AS p (publisheMd)
booktown- # USING (publisheMd)
booktown- # GROUP BY p.name;
26.5000000000 | Ace Books
19.0000000000 | Books of Wonder
26.5000000000 I Doubleday
18.0000000000 | Henry Holt Company. Inc.
23.0000000000 I Kids Can Press
23.0000000000 | Mojo Press
20.0000000000 I Penguin
23.0000000000 Random House
26.0000000000 | Watson-Guptill Publications
Функція countO повертає кількість значень, для яких вираз відмінно від NULL. Тип виразу не обмежується. Слід пам'ятати, що функція count () підраховує тільки значення, відмінні від NULL, тому для отримання осмислених результатів використовується вираз не повинно повертати NULL для підраховуваних записів.
Якщо при виклику count () передається символ *, функція просто підраховує всі записи, в тому числі і містять NULL.
booktown = # SELECT countC *) FROM editions;
booktown = # SELECT count (isbn). p.name
booktown- # FROM editions JOIN publishers AS p (publisheMd)
booktown- # USING (publisheMd)
booktown- # GROUP BY p.name
booktown- # ORDER BY count DESC;
3 | Random House
1 | Books of Wonder
1 | Henry Holt Company. Inc.
1 | Kids Can Press
1 | O'Reilly Associates
1 | Watson-Gupti11 Publications
Функція max () повертає максимальне значення заданого виразу в групі. Результатом виразу може бути значення будь-якого числового або строкового типу, а також типу дати або часу. Тип значення, що повертається збігається з типом виразу.
booktown = # SELECT max (cost), max (retail) FROM stock;
booktown = # SELECT max (retail), p.name
booktown- # FROM (stock NATURAL JOIN editions)
booktown- # JOIN publishers AS p (publisher_id)
booktown- # USING (publisherjd)
booktown- # GROUP BY p.name
booktown- # ORDER BY max DESC;
45.95 i Ace Books 36.95 Doubleday 32.95
Random House 28.95 HarperCollins
28.95 I Watson-Guptill Publications
24.95 | Mojo Press
23.95 1 Henry Holt Company. Inc. 23.95
Kids Can Press 21.95 Books of Wonder
Функція min () повертає мінімальне значення заданого виразу в групі. Результатом виразу може бути значення будь-якого числового або строкового типу, а також типу дати або часу. Тип значення, що повертається збігається з типом виразу.
booktown = # SELECT min (cost). min (retail) FROM stock;
booktown = # SELECT min (retail), p.name
booktown- # FROM (stock NATURAL JOIN editions)
booktown- # JOIN publishers AS p (publisheMd)
booktown- # USING (publisheMd)
booktown-l GROUP BY p.name
booktown- # ORDER BY min ASC;
16.95 | Random House
21.95 I Books of Wonder
23.95 | Henry Holt Company. Inc.
23.95 | Kids Can Press
24.95 | Mojo Press
28.95 I HarperCollins
28.95 | Watson-Guptill Publications
Функція stddev Про отримує вираз, що описує значення будь-якого числового типу (numeri с, bigi nt, smal 1 i nt, real або doubl e preci si on), і повертає середньоквадратичне відхилення для групи. Для речових виразів результат повертається у вигляді значення типу double precision, а для інших типів -в вигляді значення типу numeric.
booktown = # SELECT stddev (retail) FROM stock;
booktown = # SELECT stddev (retail), p.name
booktown- # FROM (stock NATURAL JOIN editions)
booktown- # JOIN publishers AS p ON (publisheMd = p.id)
booktown- # GROUP BY p.name
booktown- # ORDER BY stddev DESC
booktown- # LIMIT 4:
16.97 | Ace Books
16.97 | Roc 8.02 Random House
Функція sum () отримує вираз, що описує значення будь-якого числового типу (numeric, bigint, smallint, real або double precision), і повертає суму значень в групі. Для виразів типу integer результат повертається у вигляді значення типу numeric, а для виразів типу real - у вигляді значення типу double precision. В інших випадках тип значення збігається з типом виразу.
booktown = # SELECT sum (stock) FROM stock;
booktown = # SELECT sum (stock). s.subject
booktown- # FROM ((stock NATURAL JOIN editions)
booktown (# JOIN books ON (books.id = bookjd))
booktown-f JOIN subjects AS s
booktown- # ON (books.subject_id = s.id)
booktown- # GROUP BY s.subject
booktown- # ORDER BY sum DESC;
166 I Science Fiction
91 | Children's Books
Функція variance () отримує вираз, що описує значення будь-якого числового типу (numeric, bigint, small int, real або double precision), і повертає дисперсію для групи (stddevO в квадраті). Для речових виразів результат повертається у вигляді значення типу double precision, а для інших типів - у вигляді значення типу numeric.
booktown = # SELECT variance (retaiT) FROM stock;
booktown = # SELECT varianceCretail), p.name
booktown- # FROM (stock NATURAL JOIN editions)
booktown- # JOIN publishers AS p
booktown- # ON (editions.pub! isher_id = p.id)
booktown- # GROUP BY p.name
booktown- # ORDER BY variance DESC
booktown- # LIMIT 4: variance name
288.00 | Ace Books 288.00 I Roc 64.33.
Random House 32.00 | Doubleday