Почему возвращается 2 разных значения

pilot911

Новичок
Почему возвращается 2 разных значения

Почему возвращается 2 разных значения и как узнать ID строки с минимальной ценой ?




Вообще, как при использовании агрегирующих функций хранится информация о строке, из которой выбрано, например, минимальное значение чего-то ?
 

zerkms

TDD infected
Команда форума
твоё желание противоречит здравой логике и ansi sql92
имея минимальную цену - выбирай строку, в которой цена равна минимальной.

ps: вопрос задаётся на форуме постоянно.
 

pilot911

Новичок
все-таки вопрос остается открытым


у меня есть таблицы:

"тип_цены"

Розница
Мелкий опт
Оптовая
....


"тип_цены_продук_цена"

тип_цены_ID продукт_ID цена


Есть несколько продуктов, для них выбираю 2 минимальные цены - типа, Розница и Мелкий опт


Сейчас я делаю так:


[SQL]
SELECT
MIN(t_p1.price) AS price_min_1,
MIN(t_p2.price) AS price_min_2,
shop_price_type.price_type_title

FROM
shop_goods

LEFT JOIN shop_goods_price_linked AS t_p1
ON shop_goods.id = t_p1.goods_id

LEFT JOIN shop_goods_price_linked AS t_p2
ON shop_goods.id = t_p2.goods_id AND t_p1.price < t_p2.price

LEFT JOIN shop_price_type
ON t_p1.price_type_id = shop_price_type.id

WHERE shop_goods.id IN (3,4,5)
[/SQL]


все отлично, кроме того, что price_type_title выводится случайным образом

Как изменить запрос так, чтобы название цены выводилось для минимального значения ?
 

stillwaiting

Новичок
Автор оригинала: pilot911

все отлично, кроме того, что price_type_title выводится случайным образом

Как изменить запрос так, чтобы название цены выводилось для минимального значения ?
Вам уже ответили:
имея минимальную цену - выбирай строку, в которой цена равна минимальной.
Что именно в этом решении Вам непонятно? Если все хочется сделать одним запросом - используйте вложенные.

[sql]
SELECT t.val, t.title FROM mytable t WHERE t.val = (SELECT min(val) FROM mytable) LIMIT 1;
[/sql]
 

pilot911

Новичок
проблема решается легко, на sql.ru подсказали

Самый быстрый вариант

Агрегированный сабселект:

[sql]


SELECT *
FROM
Table2 t1
JOIN (
SELECT
t2.table1_id
, MAX(t2.id) max_file_id
FROM Table2 t2
GROUP BY table1_id
) t3 ON
t1.table1_id = t3.table1_id
AND t1.id = t3.max_file_id


[/sql]

---------
(8611 row(s)returned)
(46 ms taken)
 
Сверху