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