powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка посредством partition by
4 сообщений из 4, страница 1 из 1
Группировка посредством partition by
    #39969606
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

С PARTITION BY практически не работал, как правило не было необходимости, сейчас пытаюсь разобраться и не очень понимаю, как ограничить окна. Подробнее ниже.

Есть некая таблица table_in следующего вида (упрощенно)

IDTypeNameGenderRest1Type_11101.352Type_11308.873Type_2185.634Type_1078.965Type_2089.586Type_3167.92
,где в таблице Gender 0=female, 1=male

Необходимо получить следующую агрегированную таблицу
TypeNameFemale sumMale sum Female+Male sumType_178.96410.22489.18Type_289.5885.63175.21Type_3067.9267.92

Можно сделать так:
сначала вставить во временную таблицу distinct TypeName, а потом несколько Update по столбцам. Но мне это не нравится, потому что хоть TypeName и более менее постоянные, но тем не менее могут изменится и не хочется их хардкодить. Зато это понятно и быстро :)
Пытаюсь понять, как это можно сделать с помощью PARTITION BY. Первый и последний столбец могу получить так (хоть меня немного и смущает distinct)
Код: sql
1.
2.
3.
select distinct TypeName
sum(Rest) OVER (PARTITION BY TypeName)
from table_in


А вот как получить два средних столбца? Не понимаю как сделать без подзапроса. Мне как-то нужно ограничить окно для одного столбца только gender = 1, для другого только gender = 0. Это вообще возможно без подзапросов или нет? Просто если нет, то значит и думать нечего, сделаю подзапросами.

Заранее благодарю.
...
Рейтинг: 0 / 0
Группировка посредством partition by
    #39969610
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuCosinus,

Вам не нужен PARTITION BY

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
  TypeName
  ,sum(Rest)
  , sum(case when Gender =1 then Rest else 0 end)
  , sum(case when Gender =0 then Rest else 0 end)
from table_in
group by 
  TypeName
...
Рейтинг: 0 / 0
Группировка посредством partition by
    #39969611
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RuCosinus
немного и смущает distinct


А отсутствие гарантии повторяемости результата без явного order by не смущает?

Ну и CASE в помощь.
...
Рейтинг: 0 / 0
Группировка посредством partition by
    #39969619
RuCosinus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
спасибо.
Действительно, что-то затупил, про конструкцию с case думал, но до group by как-то не дошел. Все элементарно, еще раз благодарю

env,
да, вы правы. Причем я только что про это читал, про sum без явного group by в оконных функциях.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Группировка посредством partition by
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]