У меня есть запрос ниже, который получает subscriptions
за projects
за course
, где первая дата проекта находится после указанной c даты. Однако я хотел бы получить общую сумму subscriptions
для каждого курса.
SELECT
`courses`.`name`,
(
(
SELECT COUNT(*)
FROM `participant_subscriptions`
WHERE `participant_subscriptions`.`project_id` = `projects`.`id` AND `projects`.`course_id` = `courses`.`id`
) + (
SELECT COUNT(*)
FROM `participant_subscription_project`
WHERE `participant_subscription_project`.`project_id` = `projects`.`id` AND `projects`.`course_id` = `courses`.`id`
)
) AS `subscriptions`
FROM `courses`
JOIN `projects` ON `courses`.`id` = `projects`.`course_id`
WHERE (SELECT MIN(`date`) FROM `project_dates` WHERE `projects`.`id` = `project_dates`.`project_id`) >= '2020-01-01'
Это результат запроса выше:
| name | subscriptions |
| Basics | 6 |
| Basics | 6 |
| Advanced | 2 |
| Advanced | 4 |
| Medium | 2 |
То, что я хотел бы получить имеет следующий вид:
| name | subscriptions |
| Basics | 12 |
| Advanced | 6 |
| Medium | 2 |
courses
таблица:
projects
таблица:
project_dates
таблица
- id
- дата
- идентификатор_проекта
participant_subscriptions
таблица
- идентификатор
- идентификатор_участника
- идентификатор_проекта
participant_subscription_project
таблица
- идентификатор
- идентификатор_участника
- идентификатор_проекта