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

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

Хочется получить
Name Value PercentIvan10020Vlad15030Mark25050
...
Рейтинг: 0 / 0
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #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
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #39827241
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
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #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
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #39827253
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем откликнувшимся!
...
Рейтинг: 0 / 0
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #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
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #39827281
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
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #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
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #39827343
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL2008Подключить такую же таблицу, но агрегированную по всем группамИ где вы это увидели в предложенном запросе?
...
Рейтинг: 0 / 0
Посчитать проценты после группировки для каждой группы от суммы всех групп
    #39827352
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmSQL2008Подключить такую же таблицу, но агрегированную по всем группамИ где вы это увидели в предложенном запросе?


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

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

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


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