Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Вопрос-Ответ Новый топик    Ответить
 Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
Blob
Member

Откуда: Украина, Харьков
Сообщений: 237
Суть вопроса такова: есть учебная база, её диаграмма в аттачменте. Задание: отобрать самый дорогой товар, неважно, принтер это, лаптоп или компьютер. Пишу объединение таблиц:

select model,price from pc where price = (select MAx(price) from pc) union
select model,price from laptop where price = (select MAx(price) from laptop) union
select model,price from printer where price = (select MAx(price) from printer)

Получается табличка с самым дорогим компьютером, самым дорогим лаптопом и самым дорогим принтером (в данной базе отбирались два принтера по 400$). Но вот отобрать самый дорогой товар уже из этой таблички не получается: то SQL Server пишет, что Invalid syntax near Select, то я делаю алиас для объединённой таблицы, SQL Server пишет что Invalid object name. Неправилен мой подход к задаче (запрос надо писать не так), или я неправильно расставляю скобочки в запросе?

К сообщению приложен файл. Размер - 0Kb
4 авг 04, 18:58    [859650]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
ЮВ
Guest
В некоторых реализациях sql можно отсортировать результат по убыванию и взять первое значение полученной выборки.
4 авг 04, 19:19    [859720]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
JibSkeart
Member

Откуда: Из далекой галактики
Сообщений: 19870
попробуй select top 1 ....

 ш
(';')
(V),(V),,
JS
5 авг 04, 12:30    [861080]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
Blob
Member

Откуда: Украина, Харьков
Сообщений: 237
JibSkeart
попробуй select top 1 ....

 ш
(';')
(V),(V),,
JS


Пробую , но sql-сервер не даёт
делаю
select model , price from pc union select model,price from laptop union select model, price from printer order by price desc
Получаю табличку, где наверху та модель, что мне нужна (самая дорогая):
model price 
1750 1200.0
1752 1150.0
1298 1050.0
1233 980.0
1321 970.0
1233 950.0
1298 950.0
1121 850.0
1298 700.0
1232 600.0
1233 600.0
1232 400.0
1276 400.0
1288 400.0
1232 350.0
1260 350.0
1434 290.0
1408 270.0
1433 270.0
1401 150.0
А дальше надо применить к этой табличке ещё селект топ 1, а SQL-сервер пишет:
incorrect syntax near the keyword from
6 авг 04, 11:26    [864044]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
ЮВ
Guest
Попробуйте вместо
ORDER BY PRICE
написать порядковый номер сортируемого стобца в объединенном запросе:
ORDER BY 2
(потому что, когда объединяем запросы с разными именами столбцов, возникает неопределенность, по какому- же именованному столбцу сортировать, например,
selecn a, ...
union
selecn b, ...
union
selecn c, ...
union
selecn d, ...
union
по a, b, c ?
В такой ситуации указывается номер столбца (order by 1), даже если в частном случае имена столбцов идентичны).
6 авг 04, 20:25    [866047]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
ЮВ
Guest
Не то написал !
Некоторые SQL реализации поддерживают синтаксис
... from ... order by desc fetch first <N>;
т. е. в вашем случае fetch first 1;
6 авг 04, 20:33    [866061]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
ЮВ
Guest
а в ORACLE можно, кажется, и так:
... where rownum=1 (или rownum<2)
6 авг 04, 20:38    [866069]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
ZrenBy
Member

Откуда: Костромаа
Сообщений: 1556
FAQ #4
6 авг 04, 21:43    [866177]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
Blob
Member

Откуда: Украина, Харьков
Сообщений: 237
24-е я уже сделал, кстати на ipps не принимают ответы, где макс. значение ищется через order, объяснение у них в faq. Теперь застрял на ipps упражнение №25
Требуется найти производителя компьютера с наименьшим количеством памяти из имеющихся в наличии, при этом из этих мелкопамятных этот компьютер должен иметь самый быстрый процессор. Пишу запрос:
select distinct maker from product where 
model in(select model from (select model from pc
 where ram = (select min(ram) from pc)) as z1) 
and model in (select model from (select model, speed 
from  (select model,speed from pc where ram = (select 
min(ram) from pc)) as z2 where speed = (select max(speed)
 from (select speed from pc where ram = (select min(ram) 
from pc)) z3)) as z4)
Ответ вроде бы правильный, а не засчитывают. Какой тут может быть подводный камень, подскажите. Оба подзапроса возвращают корректные результаты: первый - модели мелкопамятных компьютеров, второй - из этих мелкопамятных самые быстрые. Вроде бы логика соответствует поставленой задаче - если модель попала и в первое и под второе условие отбора, то это та, что нам и нужна. Почему не засчитывают? Пишу так:
select distinct maker from product where model in (select model from 
	(
select z1.model,MAX(speed) ms from (select model, speed from pc where ram = (select
	min(ram) from pc)) z1 group by model) z2)
- то же самое, ответ вроде правильный, не засчитывают. Где я прокололся, чего не учёл?
10 авг 04, 14:57    [871520]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
Stepler
Member

Откуда: Северная столица!? (Питер)
Сообщений: 1435
Скока всего-то упражнений ? Могет назовешь топики по номерам упражнений и все хором будем решать всё сразу ??? Картинка с другого сайта.
Stepler (щёлк-щёлк!!) Картинка с другого сайта.
10 авг 04, 15:28    [871678]     Ответить | Цитировать Сообщить модератору
 Re: Не получается сделать 24-е упражнение на sql.ipps.ru  [new]
Blob
Member

Откуда: Украина, Харьков
Сообщений: 237
Не надо всем сразу, я в 25-м невнимательно прочитал условие. На самом деле среди производителей мелкопамятных быстрых компьютеров надо было отобрать производителей принтеров!
10 авг 04, 15:42    [871735]     Ответить | Цитировать Сообщить модератору
Все форумы / Вопрос-Ответ Ответить