Можно ли сократить этот SQL запрос?
Можно ли сократить этот SQL запрос? Если можно, то как?
SELECT DISTINCT
IIF(gender = 'F', 'Female', 'Male') AS Пол,
name AS Имя,
ifnull(surname, '') AS Фамилия,
ifnull(patronymic, '') AS Отчество,
ifnull(sobriquet, '') AS Прозвище,
ifnull(date_of_birth, '') AS 'Дата рождения',
ifnull(photo, '') AS Фото,
ifnull(biography, '') AS Биография,
iif(count_Insta = 0 OR count_Insta IS NULL, '', count_Insta) AS 'Кол-во инст',
iif(count_WorkInsta = 0 OR count_WorkInsta IS NULL, '', count_WorkInsta) AS 'Рабочие инсты',
iif(count_BrokenInsta = 0 OR count_BrokenInsta IS NULL, '', count_BrokenInsta) AS 'Не рабочие инсты',
iif(count_Telephone = 0 OR count_Telephone IS NULL, '', count_Telephone) AS 'Кол-во телефонов',
iif(count_WorkTelephone = 0 OR count_WorkTelephone IS NULL, '', count_WorkTelephone) AS 'Рабочие телефоны',
iif(count_BrokenTelephone = 0 OR count_BrokenTelephone IS NULL, '', count_BrokenTelephone) AS 'Не рабочие телефоны',
iif(count_Tg = 0 OR count_Tg IS NULL, '', count_Tg) AS 'Кол-во телег',
iif(count_WorkTg = 0 OR count_WorkTg IS NULL, '', count_WorkTg) AS 'Рабочие телеги',
iif(count_BrokenTg = 0 OR count_BrokenTg IS NULL, '', count_BrokenTg) AS 'Не рабочие телеги',
iif(count_Tik = 0 OR count_Tik IS NULL, '', count_Tik) AS 'Кол-во ТикТоков'
FROM
people p
LEFT JOIN (
SELECT DISTINCT
i.id_people,
COUNT(i.id_people) over (partition by i.id_people) as count_Insta,
COUNT(i.id_people) over (partition by i.id_people) - SUM(broken) over (partition by i.id_people) as count_WorkInsta,
SUM(broken) over (partition by i.id_people) as count_BrokenInsta
FROM instagram i
) c_ins ON p.id = c_ins.id_people
LEFT JOIN (
SELECT DISTINCT
mt.id_people,
COUNT(tel.id) over (PARTITION BY mt.id_people) as count_Telephone,
COUNT(tel.id) over (PARTITION BY mt.id_people) - SUM(tel.broken) over (partition by mt.id_people) as count_WorkTelephone,
SUM(tel.broken) over (partition by mt.id_people) as count_BrokenTelephone
FROM
merge_telephone mt
JOIN telephone tel ON mt.id_telephone = tel.id
) c_tel ON p.id = c_tel.id_people
LEFT JOIN (
SELECT DISTINCT
id_people,
COUNT(id_people) over (partition by id_people) as count_Tg,
COUNT(id_people) over (partition by id_people) - SUM(broken) over (partition by id_people) as count_WorkTg,
SUM(broken) over (partition by id_people) as count_BrokenTg
FROM telegram
) c_tg ON p.id = c_tg.id_people
LEFT JOIN (
SELECT DISTINCT
id_people,
COUNT(id_people) over (partition by id_people) as count_Tik
FROM tiktok
) c_tik ON p.id = c_tik.id_people
ORDER BY
name,
surname,
patronymic;