Платежи по месяцам и годам онлайн урок.


Для начала определим, как нам получить группы записей по месяцам и годам. У нас в распоряжении есть функции YEAR, которая извлекает год из даты, а также функция MONTH, которая извлекает месяц. В предложении группировки GROUP BY мы как раз укажем результаты действия этих функций. Для проверки наших намерений, попробуем такой запрос:

SELECT YEAR(payment_date) AS year, MONTH(payment_date) AS month FROM payments GROUP BY YEAR(payment_date), MONTH(payment_date)

Получим как раз таблицу, где перебраны все месяца и года - то, что нам надо.

+------+-------+
| year | month |
+------+-------+
| 2003 | 1 |
| 2003 | 2 |
| 2003 | 3 |
| 2003 | 4 |
... ... ... ... ...
... ... ... ... ...
| 2005 | 1 |
| 2005 | 2 |
| 2005 | 3 |
| 2005 | 4 |
| 2005 | 5 |
| 2005 | 6 |
+------+-------+


Осталось включить в запрос сумму по группам в поле платежей, соединить выбранные поля с полями имя, фамилия таблицы заказчика и указать, какой именно заказчик нас интересует.

SELECT c.last_name, c.first_name, SUM(p.amount) as payment, YEAR(p.payment_date) AS year, MONTH(p.payment_date) AS month 
FROM customers c JOIN payments p ON c.id = p.customer_id
WHERE c.id = 5
GROUP BY YEAR(p.payment_date), MONTH(p.payment_date)


+------------+------------+----------+------+-------+
| last_name | first_name | payment | year | month |
+------------+------------+----------+------+-------+
| Bergulfsen | Jonas | 50218.95 | 2003 | 2 |
| Bergulfsen | Jonas | 1491.38 | 2003 | 10 |
| Bergulfsen | Jonas | 52514.46 | 2004 | 11 |
+------------+------------+----------+------+-------+