SQL Min()问题-无法解决我的问题

问题描述 投票:0回答:1

我有一个ProductTable和SalesTable。

产品表包含我所有的产品,所有产品都有唯一的ID,但有时会重复MPN(产品代码)。我对每种特定mpn的最低价商品感兴趣,这很简单。下面的查询为产品表解决了此问题。

select model, min(price) price, quantity from tcart_product where quantity > 0 group by model

足够简单...

但有时某些商品会出售。这些销售记录在销售表中,有效销售记录了相应的产品编号(无mpn)。因此,某商品的价格可能比mpn最低价的商品要高,但是如果有销售进行,则该商品将因销售而成为最低价的商品。

因此,我需要选择价格最低的商品的产品ID,但是如果有销售,我需要选择该商品。

我无法正常使用。

下面是我所拥有的。

select case when MIN(g.price)> s.SalePrice then s.salepid
else g.product_id 
 /*it's up to chance which product id gets selected. not necessarily lowest priced*/
end as saleproduct_id,g.mpn,
s.SalePrice from tcart_product g
left join 
(SELECT product_id as salepid, price as SalePrice FROM tcart_product_special where date_end> curdate()) s
                            on g.product_id=s.salepid
                            where quantity > 0 group by g.model
mysql if-statement switch-statement case min
1个回答
0
投票

我怀疑您想要:

select tp.*
from tcart_product tp
where tp.price = (
    select min(tp1.price)
    from tcart_product tp1
    where 
        tp.mpn = tp1.mpn
        and exists (
            select 1 
            from tcart_product_special tps
            where tps.salepid = tp1.product_id
        )
)

这将使tcart_product中的行在共享相同mpnproduct_id至少有一笔交易的行中具有最低的价格。

© www.soinside.com 2019 - 2024. All rights reserved.