Count(*) у GROUP BY
Функція COUNT(*)
у інструкції GROUP BY
підраховує кількість рядків у групі, для якої виконується агрегація. Вона часто використовується для підрахунку кількості унікальних записів у групі.
Синтаксис
COUNT(*)
можна використовувати як самостійну функцію агрегації або в комбінації з іншими функціями агрегації, такими як SUM()
або AVG()
. Синтаксис для COUNT(*)
:
COUNT(*) [OVER (PARTITION BY column_name [ORDER BY order_by_clause])]
* column_name
– необов’язковий аргумент, який вказує стовпець, що використовується для групування.
* order_by_clause
– необов’язковий аргумент, який вказує порядок, у якому стовпці повинні бути відсортовані всередині кожної групи.
Якщо аргумент column_name
не вказаний, COUNT(*)
підраховує кількість рядків у всьому наборі даних.
Відмінність від COUNT(column_name)
Функція COUNT(*)
відрізняється від COUNT(column_name)
тим, що:
* COUNT(*)
підраховує кількість усіх рядків у групі, навіть якщо стовпці містять значення NULL.
* COUNT(column_name)
підраховує лише кількість рядків, у стовпці column_name
яких містяться значення, відмінні від NULL.
Використання
COUNT(*)
використовується в наступних ситуаціях:
* Підрахунок кількості унікальних записів у групі: COUNT(*)
разом з інструкцією GROUP BY
може бути використаний для підрахунку кількості унікальних записів для кожного значення групування. Наприклад, наступний запит підраховує кількість замовлень для кожного клієнта:
SELECT customer_id, COUNT(*)
FROM orders
GROUP BY customer_id;
* Підрахунок кількості значень NULL у стовпці: COUNT(*)
можна використовувати для підрахунку кількості рядків, у стовпцях яких міститься значення NULL. Наприклад, наступний запит підраховує кількість клієнтів, у яких не вказано адресу електронної пошти:
SELECT COUNT(*)
FROM customers
WHERE email IS NULL;
Застосування у підзапросах
COUNT(*)
також можна використовувати у підзапросах. Наприклад, наступний підзапит повертає середнє значення кількості замовлень для кожного клієнта:
SELECT customer_id,
(SELECT AVG(COUNT(*))
FROM orders
WHERE customer_id = outer_query.customer_id) AS avg_order_count
FROM customers;
Обмеження
* COUNT(*)
не підтримується в деяких базах даних, таких як Oracle і DB2.
* COUNT(*)
може бути повільною для великих наборів даних, особливо коли він використовується разом з іншими функціями агрегації.
* COUNT(*)
не приймає жодних аргументів, що обмежує його корисність у деяких ситуаціях.
Запитання 1: Що таке count(*) у інструкції GROUP BY?
Відповідь: COUNT(*) – це агрегатна функція, яка підраховує кількість рядків у групі, створеній інструкцією GROUP BY. Вона повертає ціле число, яке представляє кількість рядків у кожній групі.
Запитання 2: Навіщо використовувати COUNT(*) у GROUP BY?
Відповідь: COUNT(*) використовується для підрахунку кількості унікальних значень у певному стовпці для кожної групи. Це корисно для отримання даних про розподіл даних у групі та для загального підрахунку елементів у групі.
Запитання 3: Чим відрізняється COUNT(*) від COUNT(column_name)?
Відповідь: COUNT(*) підраховує всі рядки в групі, включаючи значення NULL, тоді як COUNT(column_name) підраховує лише рядки з непустою колонкою column_name.
Запитання 4: Які обмеження використання COUNT(*)?
Відповідь: COUNT(*) не можна використовувати зі стовпцями, які містять дублікати, оскільки це призведе до невірних результатів. Для підрахунку унікальних значень у разі дублікатів слід використовувати COUNT(DISTINCT column_name).
Запитання 5: Чи можу я використовувати COUNT(*) з іншими агрегатними функціями?
Відповідь: Так, COUNT(*) можна використовувати з іншими агрегатними функціями, такими як SUM(), AVG() і MIN(), для отримання більш складних статистичних даних про групи.