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

Откуда:
Сообщений: 21
есть 3 таблицы Dish(idDish, Name,sum), WhatToZakaz( IdWhatToZakaz, number,idZakaz,idDish), Zakaz(idZakaz,date)
Нужно вывести блюдо(например борщ) и с ним другое блюдо,которое чаще всего именно с ним покупают.
select top 1 with ties Dish.NameOfDish as [Блюдо] , WhatToZakaz.idDish,
count(Dish.idDish)
from Dish right join WhatToZakaz on WhatToZakaz.idDish=Dish.idDish
group by NameOfDish, WhatToZakaz.idDish
order by rank()
over(partition by Dish.NameOfDish
order by count(Dish.idDish) desc);

Вывожу значения блюд,их номера и сумму всех заказанных, а дальше нужно сравнивать блюда и заказы?
P.S. первый год с sql

Сообщение было отредактировано: 6 ноя 15, 01:55
5 ноя 15, 22:46    [18375905]     Ответить | Цитировать Сообщить модератору
 Re: Вывести блюдо,с которым чаще всего покупают другое блюдо  [new]
svpk
Member

Откуда:
Сообщений: 26
declare @DishName varchar(250) = 'Борщ';

declare @DishId int;
select @DishId = idDish from Dish where Name = @DishName;

with a as
(
select idZakaz from WhatToZakaz where idDish = @DishId
)
select top 1 w.idDish, d.Name
from a
	join WhatToZakaz w on w.idZakaz = a.idZakaz
	join Dish d on d.idDish = w.idDish
where w.idDish <> @DishId
group by w.idDish, d.Name
order by sum(number) desc;
6 ноя 15, 02:36    [18376257]     Ответить | Цитировать Сообщить модератору
 Re: Вывести блюдо,с которым чаще всего покупают другое блюдо  [new]
aleks2
Guest
Не надо совать под группировку лишнее.
И минуют вас пичали тормозов.
declare @DishName varchar(250) = 'Борщ';

declare @DishId int;
select @DishId = idDish from Dish where Name = @DishName;

with a as
(
select idZakaz from WhatToZakaz where idDish = @DishId
),
b as
(
select top(1) w.idDish
  from a join WhatToZakaz w on w.idZakaz = a.idZakaz
  where w.idDish <> @DishId
  group by w.idDish
  order by sum(number) desc
)
select d.Name
 from b inner join Dish d on d.idDish = b.idDish;
6 ноя 15, 09:06    [18376528]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить