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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: запрос на Oracle

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: как составить запрос на Oracle
Silus
Отправлено: 20 Апреля, 2009 - 22:19:58
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Есть таблица "Ноутбуки" с полями (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е данный запрос не работает. В чем может быть ошибка или я неправильно составил запрос?

(Отредактировано автором: 20 Апреля, 2009 - 22:20:53)

 
 Top
Champion Супермодератор
Отправлено: 21 Апреля, 2009 - 09:48:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Я честно говоря, удивляюсь, как такие запросы в 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*/
 
 Top
Silus
Отправлено: 21 Апреля, 2009 - 10:32:36
Post Id


Новичок


Покинул форум
Сообщений всего: 13
Дата рег-ции: Авг. 2007  


Помог: 0 раз(а)




Champion пишет:
Не работает из-за группировки.

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

Если я не ошибаюсь, этот запрос выведит просто первые или последние записи. Мне нужно вывести по одной модели(первую или последнюю) из каждого бренда. Поэтому я и использовал группировку.
 
 Top
Champion Супермодератор
Отправлено: 21 Апреля, 2009 - 10:58:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Silus пишет:
Если я не ошибаюсь, этот запрос выведит просто первые или последние записи. Мне нужно вывести по одной модели(первую или последнюю) из каждого бренда. Поэтому я и использовал группировку.
Аа, вот это яснее.
Можно, напрмер, так:
SELECT min(model) as model, brend FROM netbook ORDER BY Brend ASC,Model ASC GROUP BY model
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB