ОБЪЕДИНЕНИЕ нескольких таблиц на основе одной справочной таблицы и подсчет записей

#sql #sql-server #join #cross-join

#sql #sql-сервер #Присоединиться #перекрестное объединение

Вопрос:

У меня есть следующие таблицы:

Автомобили:

 id   manufacturer
--------------------        
1     Nissan
2     Toyota 
3     Honda
4     Volkswagen
  

Тип:

 id       type                    car_id
--------------------------------------------
1        maxima                   1
2        civic                    3
3        accord                   3
4        corolla                  2
5        altima                   1
  

Цвет:

 id      color          car_id
———————————--------------------
1       yellow          1
2       blue            2
3       blue            1
4       black           4
5       red             1
  

требуемая таблица:

 car_id       total_type       total_colors
————————————————---------------------------
1                2                     3               
2                1                     1
3                2                     0
4                0                     1
  

Как я могу получить результирующую таблицу? Я бы предпочел не использовать предложение with . Будет ли a CROSS JOIN оптимальным способом?

Ответ №1:

Кажется, это можно было бы сделать с помощью 2 ЛЕВЫХ объединений и ПОДСЧЕТА ОТДЕЛЬНЫХ агрегатных функций. Что-то вроде этого

 select c.id, count(distinct t.id) total_type, count(distinct co.id) total_colors, 
from cars c
     left join [types] t on c.id=t.car_id
     left join colors co on c.id=co.car_id
group by c.id
order by 1;