Mysql加入WHERE min(值)

时间:2015-05-07 19:19:36

标签: php mysql join

我有这个问题

我有2张桌子

1. product_detail
-id
-name
-thumb

2. product_sale
-id
-pid
-fid
-price
-package

 SELECT * 
 FROM product_sale 
 WHERE MIN(product_sale.price) 
 JOIN product_detail 
   ON product_detail.id = product_sale.pid

ORIGINAL SELECT SORRY发布错误

SELECT * FROM product_detail INNER JOIN product_sale ON product_detail.id = pid

我在product_detail示例Product1中有1个产品 我在Product_sale中为Product1设置了许多行,但是product_sale.fid和product_sale.price

不同

我需要做的是在product_sale

中选择一个显示Product1 With Lovest Price的选项
1 Product1 1.50 1pz
2 Product2 2.50 3pz
3 Product3 3.00 1pz

现在我得到了

1 Product1 1.50 1pz
2 Product1 1.65 1pz
3 Product1 1.70 1pz
4 Product3 3.00 1pz

请帮助我选择我需要做什么?谢谢大家

4 个答案:

答案 0 :(得分:1)

禁止子查询,你不能在WHERE之后加入,我很确定你也不能在WHERE中使用MIN。但是,您可以在WHERE包含MIN的子查询。

SELECT * 
FROM product_sale AS ps INNER JOIN product_detail AS pd ON ps.pid = pd.id
WHERE (ps.pid, ps.price) IN (
   SELECT pid, MIN(price) 
   FROM product_sale 
   GROUP BY pid
);

请注意,如果产品以最低价格多次出售,您将获得多行。我不清楚#pz值应该是什么,但我的答案中的*可能是pd.id, pd.name, COUNT(1) AS pzGROUP BY pd.id, pd.name放在;

编辑:以下内容应该在下面的评论中得到“最后一次销售”这个答案。

SELECT * 
FROM product_sale AS ps3 
    INNER JOIN product_detail AS pd ON ps3.pid = pd.id
WHERE ps3.fid IN (
    SELECT MAX(ps2.fid) AS lastFidsForPidsAtLowestPrices
    FROM product_sale AS ps2
    WHERE (ps2.pid, ps2.price) IN (
        SELECT ps1.pid, ps1.MIN(price) AS lowestPriceForPid
        FROM product_sale AS ps1
        GROUP BY ps1.pid
        )
    GROUP BY ps2.pid
    )
;

答案 1 :(得分:0)

似乎是一个小组和一个小组的直接联接..

SELECT PD.name, min(price) as LowestSoldPrice, PD.Thumb, PS.Package
FROM product_Detail PD
LEFT JOIN product_Sale PS
 on PD.ID = PS.PID
GROUP BY PD.name, PD.Thumb, PS.Package

答案 2 :(得分:0)

我根本不理解你的查询。我很惊讶它产生了任何错误。这就是我要做的。

select pd.id productid,
min(pd.name) name, -- min just so I do not have a complex group by
min(ps.price) minprice
from product_detail pd
join product_sale ps
on pd.id=ps.pid
group by pd.id

这将为每个产品ID提供一行,其中包含产品名称和最低价格。

答案 3 :(得分:0)

 SELECT ps.*, pd.* 
 FROM product_sale ps
 LEFT JOIN product_sale t
   ON ps.pid = t.pid AND ps.price>t.price
 LEFT JOIN product_detail pd
   ON pd.id = product_sale.pid
WHERE t.pid IS NULL

但是在这里很多人我想知道你是否真的需要GROUP BY。如果您有2个或更多具有相同最低价格的销售,那么接受的行为是什么?是否应归还所有记录?还是只有一个?哪一个呢?