Попытка построить запрос SQL (MySQL), который подсчитывает количество бронирований каждого пункта обслуживания за каждый месяц года. - PullRequest
1 голос
/ 30 марта 2019

У меня соленье с запросом.Я пытаюсь создать график-график Google, который показывает количество бронирований для каждого вида деятельности в течение года.На рисунках ниже я делаю это в неделях, но мне все равно, если это будет в месяцах или неделях.

Как я хочу подойти к этому запросу, посчитав общее количество забронированных мест в одном учреждении, одиннедели за раз.

Это две таблицы, с которыми я работаю для этого запроса. enter image description here

Для производстваэто:

enter image description here

Так что я могу использовать результат этого запроса для создания Google-диаграммы, которая будет выглядеть так:

enter image description here

РАЗРЕШЕНО.Ответ на запрос:

SELECT DATE_FORMAT(b.booking_date, '%Y-%m') AS booking_month,
         SUM(f.facility_name = 'Pitch 1')    AS Pitch1,
         SUM(f.facility_name = 'Pitch 2')    AS Pitch2,
         SUM(f.facility_name = 'Training Pitch 1')  AS TPitch1,
         SUM(f.facility_name = 'Training Pitch 2')  AS TPitch2,
         SUM(f.facility_name = 'Front Bar') AS FrontBar,
         SUM(f.facility_name = 'Back Bar') AS BackBar,
         SUM(f.facility_name = 'Gaelscoil Building 1') AS Gaelscoil1,
         SUM(f.facility_name = 'Gaelscoil Building 2')  AS Gaelscoil2
         FROM tbl_booking b
         INNER JOIN tbl_facility f ON f.facility_id = b.facility_id
         GROUP BY DATE_FORMAT(b.booking_date, '%Y-%m')
         ORDER BY DATE_FORMAT(b.booking_date, '%Y-%m')

1 Ответ

1 голос
/ 30 марта 2019

Вам нужен какой-нибудь поворот. В SQL стандартный способ сделать это - использовать условное агрегирование . Обратите внимание, что для этого необходимо заранее знать, сколько столбцов будет возвращать ваш запрос (т. Е. Вам нужно знать список объектов до выполнения запроса).

Рассмотрим:

SELECT
    DATE_FORMAT(b.booking_time_start, '%Y-%m') AS booking_month,
    SUM(f.facility_name = 'Pitch1')    AS Pitch1,
    SUM(f.facility_name = 'Pitch2')    AS Pitch2,
    SUM(f.facility_name = 'T.Pitch1')  AS TPitch1,
    SUM(f.facility_name = 'T.Pitch2')  AS TPitch2,
    SUM(f.facility_name = 'front Bar') AS FrontBar,
    SUM(f.facility_name = 'Back Bar')  AS BackBar
FROM tbl_booking b
INNER JOIN tbl_facility f ON f.facility_id = b.facility_id
GROUP BY DATE_FORMAT(b.booking_time_start, '%Y-%m')
ORDER BY DATE_FORMAT(b.booking_time_start, '%Y-%m')

Примечание: я добавил год в первый столбец, который представляет период агрегации; это позволяет избежать смешивания данных, если у вас есть данные за один год, а также позволяет правильно сортировать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...