Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

Проблема с запрос ом   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
3-27327
Kirillka
2003-09-17 11:42
2003.10.09
конвертация


14-27635
саша2
2003-09-23 07:45
2003.10.09
а бирск?


3-27340
Denizzz
2003-09-20 07:50
2003.10.09
Работа с Excel


1-27479
777
2003-09-26 21:53
2003.10.09
Action


1-27484
Эли
2003-09-26 19:55
2003.10.09
OpenDialog