Sql - урок 8
Головна → Уроки SQL → Урок 8. Угруповання записів і функція COUNT ()
Давайте згадаємо, які повідомлення і в будь темах у нас є. Для цього можна скористатися звичним запитом:
А що, якщо нам треба лише дізнатися скільки повідомлень на форумі є. Для цього можна скористатися вбудованою функцією COUNT (). Ця функція підраховує число рядків. Причому, якщо в якості аргументу цієї функції виступає *, то підраховуються всі рядки таблиці. А якщо в якості аргументу вказується ім'я стовпця, то підраховуються тільки ті рядки, які мають значення в зазначеному стовпці.
У нашому прикладі обидва аргументи дадуть однаковий результат, тому що всі стовпці таблиці мають тип NOT NULL. Давайте напишемо запит, використовуючи як аргумент стовпець id_topic:
Отже, в наших темах є 4 повідомлення. Але що, якщо ми хочемо дізнатися скільки повідомлень є в кожній темі. Для цього нам знадобиться згрупувати наші повідомлення по темах і обчислити для кожної групи кількість повідомлень. Для угруповання в SQL використовується оператор GROUP BY. Наш запит тепер буде виглядати так:
Оператор GROUP BY вказує СУБД згрупувати дані по стовпцю id_topic (тобто кожна тема - окрема група) і для кожної групи підрахувати кількість рядків:
Ну ось, в темі з id = 1 у нас 3 повідомлення, а з id = 4 - одне. До речі, якби в поле id_topic були можливі відсутності значень, то такі рядки були б об'єднані в окрему групу зі значенням NULL.
Припустимо, що нас цікавлять тільки ті групи, в яких більше двох повідомлень. У звичайному запиті ми вказали б умова за допомогою оператора WHERE. але цей оператор вміє працювати тільки з рядками, а для груп ті ж функції виконує оператор HAVING.
В результаті маємо:
В уроці 4 ми розглядали, які умови можна задавати оператором WHERE. ті ж умови можна задавати і оператором HAVING. тільки треба запам'ятати, що WHERE фільтрує рядки, а HAVING - групи.
Отже, сьогодні ми дізналися, як створювати групи і як підрахувати кількість рядків у таблиці і в групах. Взагалі разом з оператором GROUP BY можна використовувати і інші вбудовані функції, але їх ми будемо вивчати пізніше.
Якщо цей сайт виявився вам корисний, ви можете допомогти в його розвитку, поставивши одну з цих посилань на свій сайт.