我有一个库存表,其中包含product_id,company_id,size_id和price的外键。 我需要获取每个产品的公司总数,产品名称(升序),价格和数量(仅用于最低价格)。
我尝试过
SELECT pr.product_name,
COUNT(DISTINCT stock.company_id) AS total_companies,
sz.size_name,
stock.price
FROM stock
JOIN product pr ON pr.id = stock.product_id
JOIN size sz ON sz.id = stock.size_id
GROUP BY stock.product_id
ORDER BY pr.product_name ASC;
到目前为止,这里每种产品的尺寸和价格都是随机的。如果我将MIN(stock.price)放入选择查询中,则价格是正确的,但是关联的大小是错误的。如果我只选择最低价格的产品,那么公司数量将减少到1。
非常感谢任何帮助或指针。
答案 0 :(得分:0)
在V8之前的MySQL中这有点棘手。一种方法是使用group_concat()
/ substring_index()
技巧:
SELECT pr.product_name,
COUNT(DISTINCT s.company_id) AS total_companies,
SUBSTRING_INDEX(GROUP_CONCAT(sz.size_name ORDER BY s.price), ',', 1) as size_at_min_price
MIN(s.price) as min_price
FROM stock s JOIN
product pr
ON pr.id = s.product_id JOIN
size sz
ON sz.id = s.size_id
GROUP BY s.product_id
ORDER BY pr.product_name ASC;
注意:
GROUP_CONCAT()
限制为1024个字节。如果还不够大,则可以增大缓冲区。答案 1 :(得分:0)
基于OP的注释,使用嵌套查询:
SELECT inner_nest.*
FROM (
SELECT pr.product_name,
COUNT(DISTINCT stock.company_id) AS total_companies,
sz.size_name,
stock.price
FROM stock
JOIN product pr ON pr.id = stock.product_id
JOIN size sz ON sz.id = stock.size_id
GROUP BY stock.product_id
ORDER BY stock.price ASC
) AS inner_nest
LIMIT 0, 1