Большое количество записей иногда бывает нужно сегментировать по определённому периоду времени. В классическом случае, когда нам нужно подсчитать записи во временном промежутке, мы подсчитываем записи по годам и месяцам.
И тут встаёт вопрос — как это сделать? На самом деле существует разные способы подсчёта записей. Например, самый распространённый из них – мы выполняем подсчёт по месяцам в SQL используя команду GROUP BY c функцией EXTRACT().
SELECT EXTRACT(YEAR FROM created_at) AS Year, EXTRACT(MONTH FROM created_at) AS Month, COUNT(*) AS Total FROM posts WHERE EXTRACT(YEAR FROM created_at) = 2024 GROUP BY Year, Month ORDER BY Month;
В этом примере опираясь на колонку created_at таблицы posts мы делаем выборку записей за 2024 год. В результате мы получим количество записей по месяцам за который нашлись записи. Стоит обратить внимание, что поддержка функции EXTRACT() может быть доступна не на всех серверах БД, и это может так же сказаться на работе этого запроса.
Если вы всё-таки решили не использовать функцию EXTRACT() для этих целей, есть альтернативный способ – использовать вместо этого функции YEAR() и MONTH().
SELECT YEAR(created_at) AS Year, MONTH(created_at) AS Month, COUNT(*) AS Total FROM posts WHERE YEAR(created_at) = 2024 GROUP BY Year, Month ORDER BY Month;
Этот способ отработает ровно также, как и пример выше. В результате получим такую же таблицу с количеством записей, разбитую по месяцам заданного года.