Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посчитать проценты после группировки для каждой группы от суммы всех групп / 13 сообщений из 13, страница 1 из 1
17.06.2019, 14:20
    #39827234
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
Имеется таблица с сгруппированными данными.
Нужно посчитать процент каждой группы от суммы всех групп.
есть ограничения
1. Сделать все это одним запросом.
2. Подключить такую же таблицу, но агрегированную по всем группам (чтобы получить сумму всех) нельзя.

Что-то пару часов ломаю голову, но решения пока не вижу.
Исходная таблица
Name ValueIvan100Vlad150Mark250

Хочется получить
Name Value PercentIvan10020Vlad15030Mark25050
...
Рейтинг: 0 / 0
17.06.2019, 14:34
    #39827240
Cristiano_Rivaldo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
SQL2008,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH t ([NAME],[value])
	AS
	(
		SELECT 'ivan',100
		UNION ALL
		SELECT 'vlad',150
		UNION ALL
		SELECT 'mark',250
	)
	SELECT * ,
			t.[value] * 100 / SUM(t.[value]) OVER (PARTITION BY (SELECT 1))
	FROM t
...
Рейтинг: 0 / 0
17.06.2019, 14:36
    #39827241
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
SQL2008,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-2017
пример Е
только у тебя будет
Код: sql
1.
SUM(Value) OVER(PARTITION BY (SELECT 1))
...
Рейтинг: 0 / 0
17.06.2019, 14:49
    #39827250
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
Cristiano_RivaldoSQL2008,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH t ([NAME],[value])
	AS
	(
		SELECT 'ivan',100
		UNION ALL
		SELECT 'vlad',150
		UNION ALL
		SELECT 'mark',250
	)
	SELECT * ,
			t.[value] * 100 / SUM(t.[value]) OVER (PARTITION BY (SELECT 1))
	FROM t


Да, тоже уже сделал через CTE...
По другому не смог придумать.
...
Рейтинг: 0 / 0
17.06.2019, 14:51
    #39827253
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
Спасибо всем откликнувшимся!
...
Рейтинг: 0 / 0
17.06.2019, 15:10
    #39827274
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
SQL2008Да, тоже уже сделал через CTE...
По другому не смог придумать.
Код: sql
1.
2.
3.
4.
5.
select
 a.Name, a.Value, a.Value * 100 / b.total
from
 [Таблица] a cross join
 (select sum(Value) from [Таблица]) b(total)


Вариант через sum() over предпочтительнее.

ЗЫ: предложение partition by не нужно.
...
Рейтинг: 0 / 0
17.06.2019, 15:18
    #39827281
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
GufSQL2008,

https://docs.microsoft.com/ru-ru/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-2017
пример Е
только у тебя будет
Код: sql
1.
SUM(Value) OVER(PARTITION BY (SELECT 1))

А зачем там PARTITION ? Он, вообще-то, необязателен. Просто OVER()
...
Рейтинг: 0 / 0
17.06.2019, 16:22
    #39827330
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
invmSQL2008Да, тоже уже сделал через CTE...
По другому не смог придумать.
Код: sql
1.
2.
3.
4.
5.
select
 a.Name, a.Value, a.Value * 100 / b.total
from
 [Таблица] a cross join
 (select sum(Value) from [Таблица]) b(total)



Вариант через sum() over предпочтительнее.


Подключить такую же таблицу, но агрегированную по всем группам (чтобы получить сумму всех) нельзя.
...
Рейтинг: 0 / 0
17.06.2019, 16:31
    #39827343
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
SQL2008Подключить такую же таблицу, но агрегированную по всем группамИ где вы это увидели в предложенном запросе?
...
Рейтинг: 0 / 0
17.06.2019, 16:42
    #39827352
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
invmSQL2008Подключить такую же таблицу, но агрегированную по всем группамИ где вы это увидели в предложенном запросе?


Код: sql
1.
select sum(Value) from [Таблица]
...
Рейтинг: 0 / 0
17.06.2019, 16:45
    #39827355
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
SQL2008,

Это запрос, а не агрегированная таблица.
...
Рейтинг: 0 / 0
17.06.2019, 16:49
    #39827361
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
invmSQL2008,

Это запрос, а не агрегированная таблица.
Возможно я не совсем корректно выразился.
Имелось в виду, что нельзя связать две одинаковые таблицы, так как ID у таблицы нет (увы, это так),
а полей, по которым данные можно точно сопоставить порядка 10. Если их все выводить в GROUP BY, то агрегированные данные рассыплются на более мелкие суммы.
Конечно можно все завернуть еще в один запрос с группировками, но этого сильно не хотелось.
Отсюда и "нельзя"
Вообще решение уже найдено, вопрос переходит в разряд академических.
...
Рейтинг: 0 / 0
18.06.2019, 04:52
    #39827492
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посчитать проценты после группировки для каждой группы от суммы всех групп
iapА зачем там PARTITION ? Он, вообще-то, необязателен. Просто OVER()
Буду знать, спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Посчитать проценты после группировки для каждой группы от суммы всех групп / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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