Group by: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Створено шляхом перекладу сторінки «GROUP BY»
 
вікіфікація, оформлення, правопис, шаблон, зовнішні посилання
Рядок 1:
{{без джерел|дата=січень 2017}}
'''<code>GROUP BY</code>''' &nbsp;— [[Синтаксис|синтаксична конструкція]] мови [[SQL]] для [[Агрегація|агрегації]] записів, вибраних за допомогою [[{{не перекладено|Запити мови SQL|запиту]]|cz|Příkazy jazyka SQL}} [[Select (SQL)|SELECT]].
; Приклад використання<br>
 
Нехай є таблиця статей, для кожної з яких з-поміж іншого зберігається рік їх написання. Потрібно отримати огляд того, скільки статей було написано кожного року.<source lang="sql">
== Приклади ==
SELECT rok,Count(*) FROM clanky GROUP BY rok;
Нехай є таблиця статей, для кожної з яких з-поміж іншого зберігається рік їх написання. Потрібно отримати огляд того, скільки статей було написано кожного року.<source lang="sql">
</source>Результат може бути таким:
<source lang="sql">
+------+----------+
|SELECT year |, count(*) |
FROM articles
+------+----------+
GROUP BY year;
| 2006 | 7 |
</source>
| 2007 | 15 |
</source>Результат може бути таким:
| 2008 | 22 |
{|class="wikitable"
+------+----------+
|-
|! year |!! count(*) |
|-
| 2006 | | 7 |
|-
| 2007 | | 15 |
|-
| 2008 | | 22 |
|}
 
== Інші можливості ==
 
=== <code>GROUP BY</code> та агрегатні функції ===
{{Див. також|Агрегатна функція}}
{{Див. також|Агрегатна функція<br>}}Використання <code>GROUP BY</code> дозволяє оголошуватизастосовувати агрегатні функції. Найчастіше використовується для підрахунку кількості записів, відповідних кожному значенню іншого стовпця (у вищенаведеному прикладі року), часто також суми, [[Середнє арифметичне|середнього арифметичного]] та інших [[СтатистикаСтатистична оцінка|статистичних]] оцінок]] вибраних записів.
 
=== <code>HAVING</code> ===
{{Див. також|Having (SQL)}}
{{Див. також|Having (SQL)<br>}}У випадках, коли вибірку з <code>GROUP BY</code> необхідно додатково обмежити, а використовувати оператор <code>[[Where (SQL)|WHERE</code>]] не можна, оскільки він не працює з агрегатними функціями, необхідно використовувати спеціальне ключове слово <code>HAVING</code>, яке дозволяє задавати умови над агрегатними функціями.
 
=== <code>WITH ROLLUP</code> ===
Деякі системи керування базами даних (наприклад, [[MySQL]]) підтримують конструкцію <code>WITH ROLLUP</code>, що вживається з оператором <code>GROUP BY</code>. Запит із конструкцією <code>WITH ROLLUP</code> поверне, згідно зі стандартом, рядки зі значенням [[Null (SQL)|NULL]] у тих стовпцях, відповідно до яких дані агрегуються (якщо вказані), а на місці значень агрегатних функцій &nbsp;— результати цих функцій для всіх рядків &nbsp;— наприклад, для кількості (<ttcode>count</ttcode>) це кількість усіх входжень, для суми (<ttcode>sum</ttcode>) &nbsp;— загальна сума і &nbsp;т.&nbsp;д.
 
Для вищенаведеного прикладу запиту<source lang="sql">
=== <code>HAVING</code> ===
<source lang="sql">
{{Див. також|Having (SQL)<br>}}У випадках, коли вибірку з <code>GROUP BY</code> необхідно додатково обмежити, а використовувати оператор <code>WHERE</code> не можна, оскільки він не працює з агрегатними функціями, необхідно використовувати спеціальне ключове слово <code>HAVING</code>, яке дозволяє задавати умови над агрегатними функціями.
SELECT year, count(*)
FROM articles
GROUP BY year;
</source>
</source>результат буде схожий на:
{|class="wikitable"
|-
! year !! count(*)
|-
| 2006 | | 7 |
|-
| 2007 | | 15 |
|-
| 2008 | | 22 |
|-
| NULL | | 44 |
|}
 
Значення [[Null (SQL)|NULL]] в останньому рядку представляє загальний показник за всі роки. Агрегованих стовпців або виразів може бути й більше &nbsp;— тоді результатний набір міститиме значення NULL із загальною сумою у зворотньому порядку, крім зазначених в операторі <code>GROUP BY</code>.
=== <code>WITH ROLLUP</code> ===
Деякі системи керування базами даних (наприклад, [[MySQL]]) підтримують конструкцію <code>WITH ROLLUP</code>, що вживається з оператором <code>GROUP BY</code>. Запит із конструкцією <code>WITH ROLLUP</code> поверне, згідно зі стандартом, рядки зі значенням [[NULL]] у тих стовпцях, відповідно до яких дані агрегуються (якщо вказані), а на місці значень агрегатних функцій — результати цих функцій для всіх рядків — наприклад, для кількості (<tt>count</tt>) це кількість усіх входжень, для суми (<tt>sum</tt>) — загальна сума і т.д.
 
== Посилання ==
Для вищенаведеного прикладу запиту<source lang="sql">
* {{Cite web|url=http://www.w3schools.com/sql/sql_groupby.asp|назва=SQL GROUP BY Statement|веб-сайт={{не перекладено|W3Schools}}|мовою=англійською|мертвий-url=no|дата-доступу=5 січня 2017}}
SELECT rok,Count(*) FROM clanky GROUP BY rok WITH ROLLUP;
* {{Cite web|url=http://dev.mysql.com/doc/refman/5.7/en/group-by-modifiers.html|назва=GROUP BY MOdifiers|веб-сайт=[[MySQL]]|мовою=англійською|мертвий-url=no|дата-доступу=5 січня 2017}}
</source>результат буде схожий на:
+------+----------+
| year | count(*) |
+------+----------+
| 2006 | 7 |
| 2007 | 15 |
| 2008 | 22 |
| NULL | 44 |
+------+----------+
Значення [[NULL]] в останньому рядку представляє загальний показник за всі роки. Агрегованих стовпців або виразів може бути й більше — тоді результатний набір міститиме значення NULL із загальною сумою у зворотньому порядку, крім зазначених в операторі <code>GROUP BY</code>.
 
{{Database-stub}}
{{SQL}}
[[Категорія:SQL]]