Спасибо за чтение, я пробовал это в течение четырех часов с некоторым хорошим прогрессом, но я просто не могу понять это.
Я упростил приложение до тех параметров, с которыми мне трудно.
У меня есть база данных клиентов, которые пользовались услугами, по одной на каждый год, и две таблицы поиска, позволяющие кодировать результаты.
Table - Gender
gender_code | gender_name
1 | Male
2 | Female
3 | Other
Table - Service
service_code | service_name
1 | WiFi
2 | Network
3 | Telephone
Table - Customers13
transactionid | customerid | service_code | gender_code
1 | 4 | 3 | 1
2 | 7 | 1 | 2
3 | 9 | 1 | 1
Table - Customers14
transactionid | customerid | service_code | gender_code
1 | 13 | 2 | 2
2 | 4 | 2 | 1
3 | 17 | 2 | 2
Я хочу получить возвращенную таблицу, в которой есть все возможные варианты обслуживания и пола, а также количество каждого из них за каждый год. Я начал с попытки правильно подсчитать и использовал следующий запрос MySQL:
select t.service_name, t.gender_name, count13, count14
from (select service_name, gender_name, count(Customers13.gender_code) as count13
from Customers13
inner join Gender on Customers13.gender_code = Gender.gender_code
inner join Service on Customers13.service_code = Service.service_code
group by service_name, gender_name) t
inner join (select service_name, gender_name, count(Customers14.gender_code) as count14
from Customers14
inner join Gender on Customers14.gender_code = Gender.gender_code
inner join Service on Customers14.service_code = Service.service_code
group by service_name, gender_name) m on m.service_name=t.service_name and
m.gender_name=t.gender_name
Это приближает меня к возвращению таблицы, которую я хочу, но только там, где есть совпадение в обеих таблицах. Я хочу получить строку, даже если в таблицах нет совпадений, например:
service_name | gender_name | count13 | count14
WiFi | Male | 1 | 0
WiFi | Female | 1 | 0
WiFi | Other | 0 | 0
Network | Male | 0 | 1
Network | Female | 0 | 2
Network | Other | 0 | 0
Telephone | Male | 1 | 0
Telephone | Female | 0 | 0
Telephone | Other | 0 | 0
Моя последняя попытка состояла в том, чтобы использовать перекрестное соединение, чтобы получить правильные первые два столбца, но я понятия не имею, как перейти к заполнению полей счетчика оттуда:
выберите имя_службы, имя_пола из поля перекрестного соединения службы.