Postgresql агрегатні функції

Повертає дисперсію значень виразу в групі

Нижче наведені більш докладні описи всіх агрегатних функцій з конкретною інформацією про особливості використання, прикладами і допустимими типами вхідних даних. У подальших описах термін вираз означає будь-який ідентифікатор в підсумковому наборі або будь-яке дійсне вираження, яке виконує операцію з цим ідентифікатором.

При виклику агрегатної функції передається агрегатний вираз, що застосовується до записів, створеним командою 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

Схожі статті