Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: запрос на Oracle
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » запрос на Oracle

Страниц (1): [1]
 

1. Silus - 20 Апреля, 2009 - 22:19:58 - перейти к сообщению
Есть таблица "Ноутбуки" с полями (Id,Model,Brend). Нужно выбрать первые или последние записи(модели) по каждому бренду, отсортированному по алфавиту.
Я сделал запрос на MySQL, все работает:

CODE (text):
скопировать код в буфер обмена
  1. SELECT t.Model,t.Brend FROM (SELECT * FROM netbook ORDER BY Brend ASC,Model ASC) t GROUP BY t.Brend;


Но в oraclе данный запрос не работает. В чем может быть ошибка или я неправильно составил запрос?
2. Champion - 21 Апреля, 2009 - 09:48:42 - перейти к сообщению
Я честно говоря, удивляюсь, как такие запросы в MySQL работают. Ну при чем тут группировка? И зачем select from select?
Не работает из-за группировки. Смысл группировки в том, чтобы (в вашем случае) получить 2 столбца: t.Brend и какое-то итоговое значеие(сумма, минимум, еще там что-то) по каждому t.Brend. Оракл просто не может определить каким образом t.Model может служить каким-то итоговым результатом по t.Brend.
(Добавление)
А первые или последние записи выбираются запросом
SELECT FIRST 5 model, brend FROM netbook ORDER BY Brend ASC,Model ASC /*или DESC*/
3. Silus - 21 Апреля, 2009 - 10:32:36 - перейти к сообщению
Champion пишет:
Не работает из-за группировки.

Вы правы, Оракл ругался на "GROUP BY".
Champion пишет:
А первые или последние записи выбираются запросом
SELECT FIRST 5 model, brend FROM netbook ORDER BY Brend ASC,Model ASC /*или DESC*/

Если я не ошибаюсь, этот запрос выведит просто первые или последние записи. Мне нужно вывести по одной модели(первую или последнюю) из каждого бренда. Поэтому я и использовал группировку.
4. Champion - 21 Апреля, 2009 - 10:58:24 - перейти к сообщению
Silus пишет:
Если я не ошибаюсь, этот запрос выведит просто первые или последние записи. Мне нужно вывести по одной модели(первую или последнюю) из каждого бренда. Поэтому я и использовал группировку.
Аа, вот это яснее.
Можно, напрмер, так:
SELECT min(model) as model, brend FROM netbook ORDER BY Brend ASC,Model ASC GROUP BY model

 

Powered by ExBB FM 1.0 RC1