Отображение всех групп каналов даже без записи в базе данных - PullRequest
0 голосов
/ 06 марта 2020

У меня есть рекламодатель и channel_group столбцы. Мой код ниже, и вывод там тоже. Я хочу, чтобы мой вывод содержал ВСЕ группы каналов (например, AJ, даже если для него нет значения) Как я могу выполнить sh это? Любые советы, потому что я понятия не имею.

(SELECT 
    advertiser,
    channel_group,
    ROUND ( sum(cost) ) AS cost
    FROM student_37.data_table

JOIN student_37.dict
    ON student_37.data_table.audiocode = student_37.dict.audiocode
JOIN student_37.channel_group
    ON student_37.data_table.medium = student_37.channel_group.channel
GROUP BY advertiser,channel_group
ORDER BY advertiser)

SELECT 
    advertiser,
    channel_group,
    cost,
    ROUND (cost::decimal/SUM(cost) OVER(PARTITION BY advertiser),2) AS sos_adv ,
    ROUND (cost::decimal/SUM(cost) OVER(PARTITION BY channel_group),2) AS sos_channel_group ,
    ROUND(cost / ( SELECT sum(cost) FROM  sos),2) AS sos    
FROM sos
ORDER BY advertiser,
     array_position(ARRAY['TVP1','TVP2','TVP tem','TVN','TVN tem','Polsat','Polsat tem','unknown'],channel_group);
"company1";"B";"TV";16537
"company1";"C";"TV";20406
"company1";"D";"TV";33380
"company1";"E";"TV";193633
"company1";"F";"TV";14957
"company1";"G";"TV";5338

"company2";"A";"TV";46580
"company2";"B";"TV";56223
"company2";"G";"TV";80735
"company2";"H";"TV";80874
"company2";"J";"TV";38511

Я хочу получить что-то подобное, у меня нет записей, поэтому мне нужно их сгенерировать?

"company1";"A";"TV";
"company1";"B";"TV";16537
"company1";"C";"TV";20406
"company1";"D";"TV";33380
"company1";"E";"TV";193633
"company1";"F";"TV";14957
"company1";"G";"TV";5338
"company1";"I";"TV";
"company1";"J";"TV";

"company2";"A";"TV";46580
"company2";"B";"TV";56223
"company2";"C";"TV";
"company2";"D";"TV";
"company2";"E";"TV";
"company2";"F";"TV";
"company2";"G";"TV";56223
"company2";"H";"TV";80874
"company2";"I";"TV";
"company2";"J";"TV";38511

1 Ответ

0 голосов
/ 06 марта 2020

Если вы хотите все группы каналов - даже те, у которых нет данных - тогда вам нужны внешние объединения.

Вы не предоставляете пример данных, но я предполагаю, что вы хочу:

SELECT advertiser, channel_group,
       ROUND( SUM(cost) ) AS cost
FROM student_37.channel_group cg LEFT JOIN
     student_37.data_table dt
     ON dt.medium = cg.channel LEFT JOIN
     student_37.dict d
    ON dt.audiocode = d.audiocode
GROUP BY advertiser, channel_group
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...