Извините за то, что я не могу использовать одно предложение, чтобы описать свой вопрос в заголовке.
У меня есть таблица, которая выглядит следующим образом:
item_id,
attr_1,
attr_2,
attr_3,
...,
attr_n,
date
Что бы я хотел добиться внешностивот так:
select
attr_1,
avg(attr_2) i_want_1
from
table
where date between some_range
group by attr_1
select
attr_1,
attr_2,
avg(attr_3) i_want_2
from
table
where date between some_range
group by attr_1, attr_2
select
attr_5,
attr_6,
avg(attr_7) i_want_3
from
table
where date between some_range
group by attr_5, attr_6
PS: item_id может появляться во многих датах.
Затем мне нужно по левому краю соединяться с каждым множеством атрибутов, чтобы получить финальную таблицу, которую я хочу, выглядит так:
item_id,
i_want_1,
i_want_2,
i_want_3,
....
Если я делаю все вышеперечисленное в одну дату, это легко достигается с помощью функции over
, например:
select
item_id,
avg(attr_2) over(partition by attr_1) i_want_1,
avg(attr_3) over(partition by attr_1, attr_2) i_want_2,
avg(attr_7) over(partition by attr_5, attr_6) i_want_3
from
table
where date = single_date
Есть ли способ использовать функцию, подобную over
для достижения окончательного результата в одном sql?
Или есть какой-нибудь простой способ решить проблему, подобную этой?
У меня слишком много i_wants, и если я сделал выше, то файл sql вышел из-под контроля.
Буду признателен, если кто-нибудь сможет помочь или дать какой-нибудь совет, потому что у меня сейчас болит голова из-за увеличения sqls.