|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
Туплю что-то я. Есть таблица позиций lots (lot_id,lot_name) и цены на позиции prices (price_id, price_lot_id, price_value). Нужно получить выборку позиций с, например, 3-мя минимальными на них ценами. Спасибо за внимание и совет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2003, 13:39 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2003, 13:54 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
Разумеется, в предложенный запрос в конструкцию WHERE вставляешь интересующую позицию (напр., AND lots.lot_name='Валенки'). Или в случае, если нужно выбрать все позиции, то в конструкцию ORDER BY перед prices.price_value нужно добавить lots.lot_name - для наглядности отображения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2003, 14:00 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
2Konrad: Штука вот в чем... на примере покажу... есть лоты с ценами валенки 1 2 3 4 5 лыжи 10 20 30 40 Нужный результат - это таблица валенки 1 валенки 2 валенки 3 лыжи 10 лыжи 20 лыжи 30 Запрос SELECT lots.lot_name, prices.price_value FROM lots, prices WHERE lots.lot_id=prices.price_lot_id ORDER BY prices.price_value ASC LIMIT 3 ограничит 3 записи вообще, это понятно... order by lots.lot_name тут не спасет никоим образом... Конструкция с AND lots.lot_name='валенки' - даст только валенки. Можно, конечно, софтом это дело решить, но - хочется - одним запросом :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2003, 14:09 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
select l.lot_name,p.price value from lots l,prices p where 3<(select count(*) from lots l1 , prices p1 where l1.lot_name=l.lot_name and p1.price_value<p.price_value) order by l.lots_name,p.prive_value desc;select l.lot_name,p.price_value from lots l,prices p where 3>(select count(*) from prices p1 where p1.price_value<p.price_value and l.lot_id=p1.price_lot_id) and l.lot_id=p.price_lot_id order by l.lot_name,p.price_value; Попробуй так. У меня работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 11:56 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
select l.lot_name,p.price_value from lots l,prices p where 3>(select count(*) from prices p1 where p1.price_value<p.price_value and l.lot_id=p1.price_lot_id) and l.lot_id=p.price_lot_id order by l.lot_name,p.price_value; Сори. Заглючило и не удалило неправильный запрос. Вот правильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 11:58 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
2seaman Класс! Выглядит на 5+! Оч. понравилось :)) еще и работает :) Правда, уже обошелся, вопрос интересовал с академической точки зрения)) Тут вот еще вариантик был (с)skondrat: select l.lot_name, p.price_value from lots l, prices p where p.price_lot_id=l.lot_id AND p.price_id IN (select price_id from prices where prices.price_lot_id=l.lot_id order by price_value limit 3) Всем спасибо :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 12:32 |
|
Никак запрос не сооброжу...
|
|||
---|---|---|---|
#18+
2Nik Полностью согласен с вариантом от skondrat. Наверняка даже быстрее работать будет (PostgreSQL), но может не везде прокатить. А вон тот с выпендрнжем :) - это просто классика. Егор нужно знать и понимать. Довольно часто такое может попасться (даже на собеседованиях при приеме на работу). По поводу варианта от skondrat - единственное могу только добавить что как правило (в PostgreSQL точно и во многих других БД) in(...) работает медленнее чем exists(...) (особенно в больших БД по 1 000 000+ записей в таблице ощущается конкретно в несколько раз по времени). Тоже нужно помнить, хотя запрос в этом случае будет выглядеть немного более громоздко и запутанно. Это по поводу академической точки зрения. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2003, 16:53 |
|
|
start [/forum/topic.php?fid=53&tid=2008150]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
142ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 254ms |
0 / 0 |