VirtualIreland.ru - Виртуальная Ирландия
Вернуться   VirtualIreland.ru - Виртуальная Ирландия > Живем в Ирландии > IT и Связь

IT и Связь Обсуждение "айтишных" вопросов и средств связи

Ответ
 
Опции темы Опции просмотра
Старый 28.04.2010, 11:43   #1
Участник
 
Сообщений: 94
Благодарности: 37 в 23 сообщениях Поиск благодарностей limon877
По умолчанию SQL вопросик

Привет
Мне дали решить вот такую вот задачку и никак не получается, может кто и поможет, или хоть намекнет как к неи подоити

One of the following two queries can be rewritten without the use of subqueries. The other cannot. Identify the one which cannot be rewritten without a subquery, and explain why it cannot. Rewrite the other so that it doesn’t use a subquery.

Есть в наличии table drug которая имеет columns: drug_code, drug_name, type, price

SELECT drug_code, drug_name
FROM drug d1
WHERE price < (SELECT MAX(price) FROM drug d2 WHERE d1.type=d2.type)



SELECT drug_code, drug_name
FROM drug d1
WHERE price < (SELECT AVG(price) FROM drug d2 WHERE d1.type=d2.type)

Any advice welcome

Спасибо
limon877 вне форума   Ответить с цитированием

Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок
Старый 28.04.2010, 11:52   #2
Спам-робот
 
Аватар для YellowMan
 
Откуда: Dublin<->Брянск
Сообщений: 21,268
Благодарности: 11,080 в 5,139 сообщениях Поиск благодарностей YellowMan
По умолчанию Re: SQL вопросик

Первый запрос можно переписать через left join.

Тупые задачки ИМХО.
__________________
My Church is Black...
YellowMan вне форума   Ответить с цитированием
Старый 28.04.2010, 12:09   #3
Участник
 
Сообщений: 94
Благодарности: 37 в 23 сообщениях Поиск благодарностей limon877
По умолчанию Re: SQL вопросик

ТАк что-ли?

SELECT d1.drug_code, d1.drug_name
FROM drug d1 LEFT OUTER JOIN (SELECT MAX(price) AS max FROM drug d2 WHERE d1.type=d2.type) AS d2

но выходит ошыбочка
limon877 вне форума   Ответить с цитированием
Старый 28.04.2010, 12:11   #4
Спам-робот
 
Аватар для YellowMan
 
Откуда: Dublin<->Брянск
Сообщений: 21,268
Благодарности: 11,080 в 5,139 сообщениях Поиск благодарностей YellowMan
По умолчанию Re: SQL вопросик

Нет, не так. Ты студент, тебе и думать
__________________
My Church is Black...
YellowMan вне форума   Ответить с цитированием
Старый 28.04.2010, 12:35   #5
Участник
 
Сообщений: 94
Благодарности: 37 в 23 сообщениях Поиск благодарностей limon877
По умолчанию Re: SQL вопросик

Пару дней думал, уже думалка не варит (sick of thinking)
limon877 вне форума   Ответить с цитированием
Старый 28.04.2010, 12:50   #6
Просто Зануда
 
Аватар для tadpole
 
Сообщений: 7,099
Благодарности: 4,110 в 1,743 сообщениях Поиск благодарностей tadpole
По умолчанию Re: SQL вопросик

По-моему, можно оба переписать без подзапросов, изпользуя inline view или WITH clause.

Думать полезно, кстати. Нейроны тренируются.
__________________
The misuse of language induces evil in the soul © Socrates

tadpole вне форума   Ответить с цитированием
Старый 28.04.2010, 14:50   #7
Спам-робот
 
Аватар для YellowMan
 
Откуда: Dublin<->Брянск
Сообщений: 21,268
Благодарности: 11,080 в 5,139 сообщениях Поиск благодарностей YellowMan
По умолчанию Re: SQL вопросик

Цитата:
Сообщение от tadpole Посмотреть сообщение
По-моему, можно оба переписать без подзапросов, изпользуя inline view или WITH clause.
Не ANSI-совместимо.

Цитата:
Пару дней думал, уже думалка не варит
Могу подсказать - в left join не обязательно всегда писать "=". Иногда можно и ">" или "<".
__________________
My Church is Black...
YellowMan вне форума   Ответить с цитированием
Благодарность от:
KaraNagai (29.04.2010)
Старый 28.04.2010, 14:51   #8
Активный Участник
 
Аватар для trump
 
Откуда: Dublin
Сообщений: 250
Благодарности: 264 в 122 сообщениях Поиск благодарностей trump
По умолчанию Re: SQL вопросик

По моему совсем без скобок нельзя.
Но вот такое вроде как работает (протестировано)

SELECT drug_code, drug_name
FROM drug d1, (select max(price) price , type from drug group by type) d2
WHERE d1.type = d2.type
AND d1.price <d2.price

И тоже самое для avg, заменить мах на avg
trump вне форума   Ответить с цитированием
Старый 28.04.2010, 14:51   #9
Спам-робот
 
Аватар для YellowMan
 
Откуда: Dublin<->Брянск
Сообщений: 21,268
Благодарности: 11,080 в 5,139 сообщениях Поиск благодарностей YellowMan
По умолчанию Re: SQL вопросик

Цитата:
Сообщение от trump Посмотреть сообщение
По моему совсем без скобок нельзя.
Садись, два.
__________________
My Church is Black...
YellowMan вне форума   Ответить с цитированием
Старый 28.04.2010, 15:24   #10
Просто Зануда
 
Аватар для tadpole
 
Сообщений: 7,099
Благодарности: 4,110 в 1,743 сообщениях Поиск благодарностей tadpole
По умолчанию Re: SQL вопросик

Цитата:
Сообщение от YellowMan Посмотреть сообщение
Не ANSI-совместимо.
А кого это волнует? Обе конструкции поддерживаются и Oracle, и SQL Server. И это правильно, так как значительно облегчают жизнь.
__________________
The misuse of language induces evil in the soul © Socrates

tadpole вне форума   Ответить с цитированием
Старый 28.04.2010, 15:35   #11
Спам-робот
 
Аватар для svu
 
Откуда: Ленинград --> Петербург --> Dublin --> Cork --> Castleisland --> Tralee
Сообщений: 20,480
Благодарности: 12,385 в 6,695 сообщениях Поиск благодарностей svu
По умолчанию Re: SQL вопросик

Вот вечно эти дазо-банщики! Никакого уважения к портируемости кода! Хлебом не корми - дай поюзать проприетарные фенечки!
svu вне форума   Ответить с цитированием
Старый 28.04.2010, 15:41   #12
Спам-робот
 
Аватар для YellowMan
 
Откуда: Dublin<->Брянск
Сообщений: 21,268
Благодарности: 11,080 в 5,139 сообщениях Поиск благодарностей YellowMan
По умолчанию Re: SQL вопросик

За портирование SQL кода надо немедленно выписывать пенделя чуть пониже спины
Суть была в том что база не была указана, а в таком случае лучше не юзать странные конструкции.
__________________
My Church is Black...
YellowMan вне форума   Ответить с цитированием
Старый 28.04.2010, 15:54   #13
READ ONLY
 
Аватар для AlexL
 
Сообщений: 3,156
Благодарности: 1,856 в 929 сообщениях Поиск благодарностей AlexL
Отправить сообщение для  AlexL с помощью ICQ
По умолчанию Re: SQL вопросик

можно второй пример без подзапроса переписать в ANSI стандарте
__________________
Хотели всё и сразу, а получили ничего и надолго.
[url=http://www.visited.ru][img]http://www.visited.ru/flagmap.php?visited=ATBEBGCZFRDEIEITMTNLRUESUKVATR[/img][/url]
AlexL вне форума   Ответить с цитированием

Зарегистрируйтесь или войдите под своим именем, чтобы спрятать этот рекламный блок
Старый 28.04.2010, 16:04   #14
Спам-робот
 
Аватар для vc
 
Сообщений: 31,257
Благодарности: 21,993 в 10,697 сообщениях Поиск благодарностей vc
По умолчанию Re: SQL вопросик

Цитата:
Сообщение от YellowMan Посмотреть сообщение
Первый запрос можно переписать через left join.

Тупые задачки ИМХО.
Что-то вроде такого?


SELECT d1.drug_code, d1.drug_name
FROM drug d1 left join drug d2 ON d1.type = d2.type
WHERE d1.price < d2.price
ORDER BY d1.drug_code, d1.drug_name;

ой, поправил

Последний раз редактировалось vc, 28.04.2010 в 16:10.
vc вне форума   Ответить с цитированием
Старый 28.04.2010, 16:05   #15
Спам-робот
 
Аватар для YellowMan
 
Откуда: Dublin<->Брянск
Сообщений: 21,268
Благодарности: 11,080 в 5,139 сообщениях Поиск благодарностей YellowMan
По умолчанию Re: SQL вопросик

Вот только не нужно - насколько оно медленнее получается?
__________________
My Church is Black...
YellowMan вне форума   Ответить с цитированием
Ответ



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать на сообщения
Вы не можете добавлять вложения
Вы не можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщ.
Вопросик Asiza Вопросы и предложения 13 13.02.2010 21:44
Вопросик! ProGameR Автотранспорт 14 31.01.2010 20:59
вопросик Ратобор Вопросы и предложения 5 25.01.2010 16:03
вопросик. xandrey Иммиграция 9 15.12.2009 21:31
Вопросик Irinak Работа в Ирландии 12 20.01.2006 11:20


Часовой пояс GMT, времени сейчас: 20:05.


vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd., Русификация: zCarot, Vovan & Co
©2003-2025 VirtualIreland.ru - Виртуальная Ирландия