Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выборка уникальных данных с использованием count, max  [new]
Adilemm3
Member

Откуда:
Сообщений: 3
Суть запроса:Вывод ФИО клиентов и самый предпочитаемый вид услуги у каждого из них за год(выбран 2019 год в запросе).
Самым предпочитаемым считается тот вид услуги который заказывался наибольшее количество раз.
Как показано на картинке я нахожу для каждого клиента сколько раз он заказывал конкретную услугу.
Итак вопрос: как мне вывести для каждого клиента именно одну услугу которую он заказал наибольшее количество раз. Тоесть 1 клиент 1 услуга.
сам запрос:
select k.Фамилия,k.Имя,k.Отчество,u.[Наименование услуги], COUNT(upp.[Id услуги]) as Количество
from Клиенты as k
inner join Посещения as p on p.[ID клиента]=k.[ID клиента]
inner join [Услуги при посещении] as upp on upp.[Id посещения]=p.[Id посещения]
inner join [Услуги парикмахера] as up on up.[ID парикмахера]=upp.[ID парикмахера] and up.[Id услуги]=upp.[Id услуги]
inner join Услуги as u on u.[Id услуги]=up.[Id услуги]
where year(p.[Дата посещения])=2019
group by k.Фамилия, k.Имя, k.Отчество, u.[Наименование услуги]


Получается так:
Абрашина Галина Ефимовна Калифорнийское мелирование 1
Абрашина Галина Ефимовна Прикорневой объем Буффан 1
Абрашина Галина Ефимовна Укладка женская 1
Андронов Мир Платонович Балаяж 1
Андронов Мир Платонович БИО-ламинирование волос 1
Андронов Мир Платонович Укладка мужская 1
Антипов Степан Арсениевич Балаяж 1
Антипов Степан Арсениевич Стрижка женская с укладкой 1
Антипов Степан Арсениевич Стрижка женская с укладкой люкс 2
Арсеньева Анфиса Иосифовна Вечерняя прическа женская 1

Должно получиться так:
Абрашина Галина Ефимовна Калифорнийское мелирование 1
Андронов Мир Платонович Балаяж 1
Антипов Степан Арсениевич Стрижка женская с укладкой люкс 2

К сообщению приложен файл. Размер - 22Kb
23 окт 19, 14:55    [22000931]     Ответить | Цитировать Сообщить модератору
 Re: выборка уникальных данных с использованием count, max  [new]
1C Developer
Member

Откуда:
Сообщений: 65
Например

PARTITION
23 окт 19, 15:12    [22000956]     Ответить | Цитировать Сообщить модератору
 Re: выборка уникальных данных с использованием count, max  [new]
Adilemm3
Member

Откуда:
Сообщений: 3
1C Developer,
Добрый вечер! не могли бы мне сказать как именно построить запрос, я пробовал с partition by. Заранее спасибо.
23 окт 19, 16:10    [22001031]     Ответить | Цитировать Сообщить модератору
 Re: выборка уникальных данных с использованием count, max  [new]
1C Developer
Member

Откуда:
Сообщений: 65
Для примера:

DECLARE @t Table (Surname NVARCHAR(100), ServiceName NVARCHAR(100))

INSERT INTO @t(Surname, ServiceName)

SELECT 'Иванов', 'Услуга1' UNION ALL
SELECT 'Иванов', 'Услуга1' UNION ALL
SELECT 'Иванов', 'Услуга2' UNION ALL
SELECT 'Петров', 'Услуга1' UNION ALL
SELECT 'Петров', 'Услуга2' UNION ALL
SELECT 'Петров', 'Услуга2'

;with CTE AS (
SELECT T.Surname, T.ServiceName, ROW_NUMBER() OVER(PARTITION BY T.Surname ORDER BY COUNT(T.ServiceName) DESC) RN
FROM @t T
GROUP BY T.Surname, T.ServiceName)
SELECT CTE.Surname, CTE.ServiceName 
FROM CTE WHERE [RN] = 1
23 окт 19, 16:41    [22001073]     Ответить | Цитировать Сообщить модератору
 Re: выборка уникальных данных с использованием count, max  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
SELECT TOP 1 WITH TIES Surname,ServiceName, COUNT(ServiceName)  FROM @t GROUP BY Surname,ServiceName ORDER BY ROW_NUMBER() OVER(PARTITION BY Surname ORDER BY COUNT(ServiceName) DESC)
23 окт 19, 16:55    [22001094]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить