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

Откуда:
Сообщений: 14
Имеется 2 таблички:

PRODUCT( ID int primary key, NAME varchar(100) )
SALES( ID int primary key, PID int REFERENCES PRODUCT(ID), PRICE REAL)

PRODUCT: SALES

1 книга1 1 1 10
2 книга2 2 2 15
3 книга3 3 1 5
.. 4 3 20
.. 5 9 18
10 книга10 6 5 10 и т.д.

Требуется: одним запросом вывести список товаров (с наименованием) с максимальной средней ценой.
Хитрость в ограничении - должен быть один запрос в двух вариантах: в первом нельзя использовать курсор/временную таблицу/подзапрос; во втором варианте - нельзя использовать всё вышеперечисленное и GROUP BY тоже.
Речь идёт о SQL2008.

Двумя запросами или с подзапросом - решение имеется, а вот как соответствовать условиям?

Заранее спасибо!
22 июл 11, 22:32    [11015387]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос - помогите! ;)  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Nubi2008,

WITH tableA AS
( SELECT blah_blah)
,TableB AS
(SELECT blah_blah)
SELECT * FROM tableA, tableB,TableC...

?
22 июл 11, 22:41    [11015411]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос - помогите! ;)  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Nubi2008
.... с максимальной средней ценой...

ето ввело меня в тупик,
так в нем и сижу
можно подробнее, а то зациклился ;) нада выйти из рекурсии
22 июл 11, 22:43    [11015422]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос - помогите! ;)  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Nubi2008,

select top (1) with ties p.Id, p.Name
from dbo.Product p
  inner join dob.Sales s on p.Id = s.PId
order by avg(s.price) over(partition by p.Id) desc;

Не проверял, но в целом идея такая.
23 июл 11, 02:09    [11016029]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос - помогите! ;)  [new]
Nubi2008
Member

Откуда:
Сообщений: 14
kapelan,

Я, честно говоря, первый раз прочитав, тоже не сразу въехал :)

Разные наименования товара могут быть проданы по одной и той же максимальной средней цене,
скажем, книги10 по 34.55 и книги5 по такой же 34.55. Поэтому недостаточно отобрать одну строчку ;(
23 июл 11, 07:35    [11016251]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос - помогите! ;)  [new]
Nubi2008
Member

Откуда:
Сообщений: 14
Идея хорошая, спасибо.
Но в финальном списке должно быть что-то вроде:

Книга1 34.55
Книга5 34.55
Книга9 34.55
23 июл 11, 07:51    [11016253]     Ответить | Цитировать Сообщить модератору
 Re: хитрый запрос - помогите! ;)  [new]
Nubi2008
Member

Откуда:
Сообщений: 14
Спасибо всем за идеи!
Объединил две подсказки и получилось ;-)
25 июл 11, 15:33    [11023568]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить