Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
3-27385
Holy
2003-09-18 14:54
2003.10.09
BDE или ADO


1-27583
Bezpal
2003-09-29 12:33
2003.10.09
Кто знает серийный и регистрационный номер для 5 Delphi?


1-27595
Fasy
2003-09-27 05:56
2003.10.09
размер папки


1-27548
AtoL
2003-09-29 17:44
2003.10.09
Проблема с типом


1-27527
Yorick
2003-09-30 08:41
2003.10.09
Как определить момент окончания перетаскивания





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский