Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизПроблема с запрос ом Найти похожие ветки
← →
Coder_ (2003-09-19 12:23) [0]Уважаемые Господа помогите решить такой вопрос.
Есть таблица в которой название продукта и его цена.
Как написать запрос который бы выводил 10 самых дорогих
продуктов.
Ecли можно приведите пожалуйста несколько решений или
с использованием ANSI SQL.
Зарание благодарен за любую помощь.
← →
Sandman25 (2003-09-19 12:34) [1]
select *
from t t1
where 10 >=
(select count(*)
from t t2
where t2.price > t1.price
)
← →
Кщд (2003-09-19 12:35) [2]select first 10 Product, Cost from YourTabel order by Cost?
← →
Rol (2003-09-19 12:36) [3]desc
← →
Johnmen (2003-09-19 12:46) [4]Простой красивый запрос - Sandman25 © (19.09.03 12:34)
:)
Единственное - скорость. Если надо максимально быстро, то лучше с помощью ХП.
← →
Krey (2003-09-19 12:56) [5]Странный запрос Sandman25 работать и не будет.
← →
Krey (2003-09-19 12:57) [6]Он выбирает такие записи, для каких есть как минимум 10 дороже.
А это разные вещи.
← →
Sandman25 (2003-09-19 13:00) [7][4] Johnmen © (19.09.03 12:46)
Спасибо :)
Да, скорость, конечно, - это проблема.
Для Ansi можно еще извратиться вот так:
select t1.*, t2.*,.., t10.*
from t t1,
t t2,
...,
t t10
where t1.price = (select max(price) from t)
and t2.price = (select max(price) from t where price < t1.price)
...
and t10.price = (select max(price) from t where price < t9.price)
Но все-таки это не совсем то, что надо - результаты склеиваются путем добавления колонок, а не строк. Хотя работать должно быстрее, чем вариант из [1]
← →
Sandman25 (2003-09-19 13:02) [8][6] Krey (19.09.03 12:57)
>Он выбирает такие записи, для каких есть как минимум 10 дороже.
А это разные вещи.
Вложенный запрос находит количество товаров дороже текущего, и если это количество не больше 10, то все ОК.
← →
Krey (2003-09-19 13:02) [9]Что может быть быстрее чем:
select first 10 Product, Cost from YourTabel order by Cost?
← →
Krey (2003-09-19 13:03) [10]>Sandman25
а ну да.
← →
Sandman25 (2003-09-19 13:05) [11][9] Krey (19.09.03 13:02)
Автор просил побольше способов, в том числе и на AnsiSQL.
Вы не поверите, но в моей СУБД (Informix) Ваш запрос не выполнится.
И еще хорошо, что тут есть способ добиться аналогичного результат. А что делать c DBF базой, например?
← →
Krey (2003-09-19 13:06) [12]>Sandman25
Ну тем более он выберет записи, для которых есть 9 дешевле.
И врезультате запроса будет отнюдь не десять записей.
← →
Krey (2003-09-19 13:08) [13]>Sandman25
НЕ знаю как в Informix, а вот в Fox"е запрос
Select Top 10 ... order является одним из самых элементарных.
← →
Sandman25 (2003-09-19 13:10) [14][12] Krey (19.09.03 13:06)
>Ну тем более он выберет записи, для которых есть 9 дешевле.
См. [8]
>И врезультате запроса будет отнюдь не десять записей.
Согласен, но только если есть товары с одинаковыми ценами. Кстати, возможно, так и надо. Например, есть 15 товаров с максимальной ценой. Почему нужно отображать только 10 из них? По какому принципу выбирать? Случайно на усмотрение сервера, как при First?
← →
Johnmen (2003-09-19 13:12) [15]>Krey (19.09.03 13:02) [9]
>Что может быть быстрее чем:
>select first 10 Product, Cost from YourTabel order by Cost?
Давай повнимательней. Какая СУБД у автора ? Для какой ты привел ?
← →
Sandman25 (2003-09-19 13:12) [16]А при чем здесь Fox?
В LocalSQL.hlp о top нет ни слова. И как Вы верно догадались, в Informix он тоже не пойдет.
Давайте прекратим наш ненужный спор и подождем автора, хорошо?
← →
Krey (2003-09-19 13:30) [17]>> Давай повнимательней. Какая СУБД у автора ? Для какой ты привел ?
Извините я неработал с InterBase. И не подозревал что там нет TOP или First.
>>where 10 >=
>> (select count(*)
тут надо равно убрать.
← →
Sandman25 (2003-09-19 13:31) [18]>тут надо равно убрать.
Согласен. Так бы сразу и написали :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c