Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом, вывести поле не включая в group by with rollup / 7 сообщений из 7, страница 1 из 1
07.04.2019, 20:22
    #39797885
Oleg_234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
Помогите с запросом ниже, для примера. К сожалению сиквел знаю плохо.
Собственно требуется вывести поле warranty.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @t table(
	id int identity not null, 
	category varchar(10), 
	subcategory varchar(10), 
	name varchar(10), 
	amount money,
	warranty int)

insert into @t
values 
	('смартфон', 'samsung', 'A3', 50, 12), ('смартфон', 'samsung', 'A5', 100, 12), ('смартфон', 'samsung', 'A7', 200, 12),
	('смартфон', 'sony', '1', 150, 24), ('смартфон', 'sony', '10', 100, 24),
	('планшет', 'samsung', '9.8', 150, 12), ('планшет', 'samsung', '8.0', 120, 12),
	('планшет', 'xiaomi', '9.8', 100, 24), ('планшет', 'xiaomi', '8.2', 70, 24)

select t.category, t.subcategory, t.name, sum(amount) as sum
from @t t
group by 
	t.category, t.subcategory, t.name WITH ROLLUP
order by
	GROUPING(t.category) DESC, t.category, GROUPING(t.subcategory) DESC, t.subcategory, GROUPING(t.name) DESC, t.name
...
Рейтинг: 0 / 0
08.04.2019, 05:57
    #39797916
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
Собственно выбор невелик

1. Включить, таки, в group by
2. Использовать мах или min, понимая последствия.
...
Рейтинг: 0 / 0
08.04.2019, 06:43
    #39797919
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
Oleg_234,

У вас нарушена 2НФ, архитектора гнать. Если это учебный пример, то, как правильно сказано, либо включать в group by, либо применять max|min|avg
...
Рейтинг: 0 / 0
08.04.2019, 10:29
    #39797966
Oleg_234
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
Спасибо за ответы. Как оказалось не совсем удачный пример, поле которое нужно вывести это строка, так что max|min|avg не подходят наверное.
...
Рейтинг: 0 / 0
08.04.2019, 12:36
    #39798023
uaggster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
Oleg_234Спасибо за ответы. Как оказалось не совсем удачный пример, поле которое нужно вывести это строка, так что max|min|avg не подходят наверное.
Почему?
avg - не работает, а min и max - вполне.
Строки - не числовые, но сравнимые объекты.
...
Рейтинг: 0 / 0
08.04.2019, 13:09
    #39798057
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
Павел Воронцов,

А что 2НФ это божественная архитектура, от которой нельзя отклоняться?

В данном случае рекомендую посмотреть GROUP BY GROUPING SETS и оконные функции (OVER PARTITIOB BY). С LAST_VALUE и FIRST_VALUE всегда можно выкрутиться.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SET LANGUAGE Russian

declare @t table(
	id int identity not null, 
	category nvarchar(10), 
	subcategory varchar(10), 
	name varchar(10), 
	amount money,
	warranty int)

insert into @t
values 
	(N'смартфон', 'samsung', 'A3', 50, 12), (N'смартфон', 'samsung', 'A5', 100, 12), (N'смартфон', 'samsung', 'A7', 200, 12),
	(N'смартфон', 'sony', '1', 150, 24), (N'смартфон', 'sony', '10', 100, 24),
	(N'планшет', 'samsung', '9.8', 150, 12), (N'планшет', 'samsung', '8.0', 120, 12),
	(N'планшет', 'xiaomi', '9.8', 100, 24), (N'планшет', 'xiaomi', '8.2', 70, 24)

select t.category, t.subcategory, t.name, sum(amount) as sum
from @t t
group by grouping sets 
	((t.category, t.subcategory), (t.category, t.subcategory, t.name))
order by
	t.category, t.subcategory, t.name
...
Рейтинг: 0 / 0
09.04.2019, 07:00
    #39798489
Павел Воронцов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом, вывести поле не включая в group by with rollup
a_voronin,

А зачем выкручиваться если можно сразу сделать по уму? НФ не "божественная архитектура", а применение логики к архитектуре бд. Если Вам нравится не уменьшать, а увеличивать количество бардака и нелогичности, то не применяйте.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите с запросом, вывести поле не включая в group by with rollup / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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