Cha*_*les 13 mysql group-by min left-join greatest-n-per-group
看似简单的MySQL问题,但我以前从来没有这样做过..
我有两张桌子,物品和价格,有一对多的关系.
Items Table
id, name
Prices Table
id, item_id, price
Run Code Online (Sandbox Code Playgroud)
哪里
prices.item_id = items.id
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的:
SELECT items.id, items.name, MIN(prices.price)
FROM items
LEFT JOIN prices ON items.id = prices.item_id
GROUP BY items.id
Run Code Online (Sandbox Code Playgroud)
如何以最低价格返回相应的price.id?谢谢!
小智 25
如果有最多价格的多个价格记录,这将为Items中的记录返回多个记录:
select items.id, items.name, prices.price, prices.id
from items
left join prices on (
items.id = prices.item_id
and prices.price = (
select min(price)
from prices
where item_id = items.id
)
);
Run Code Online (Sandbox Code Playgroud)
Son*_*nny 12
基于MySQL 5.0参考手册 - 3.6.4中的最后一个例子,新的,有效的答案.行保持某一列的组最大值:
SELECT items.id, items.name, prices.price, prices.id
FROM items
LEFT JOIN prices
ON prices.item_id = items.id
LEFT JOIN prices AS filter
ON filter.item_id = prices.item_id
AND filter.price < prices.price
WHERE filter.id IS NULL
Run Code Online (Sandbox Code Playgroud)
的LEFT JOIN
基础上的作品,当prices.price
是在其最小值,没有filter.price
一个较小的值和filter
行的值将是NULL.
原始错误答案:
SELECT items.id, items.name, prices.price, prices.id
FROM items
LEFT JOIN prices ON prices.item_id = items.id
ORDER BY prices.price ASC
LIMIT 1
Run Code Online (Sandbox Code Playgroud)