根据一组左连接记录的条件设置标志的查询

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

我有 2 个表,“制造商”和“产品”。一个制造商可以有多个产品,一个产品有“数量”、“价格”和“成本”字段。

我已经将它们连接在一起,并且可以根据乘以“数量”来获得“价格”和“成本”字段的总和,但如果有任何产品,我希望将“cost_complete”标志设置为 false。未设置特定制造商的成本字段,因此我可以识别其产品尚未设置“成本”的任何制造商。

这是我到目前为止所拥有的,但我认为我的“cost_complete”标志会被每个产品覆盖。

SELECT m.name, p.quantity, p.price, p.cost, SUM(p.quantity) AS total_quantity, 
    SUM(p.price*p.quantity) AS total_price, SUM(p.cost*p.quantity) AS total_cost, 
    IF(p.cost<0, 'true','false') AS cost_complete 
FROM manufacturer m 
LEFT JOIN product p ON m.manufacturer_id = p.manufacturer_id 
GROUP BY m.manufacturer_id 
ORDER by m.name
mysql if-statement left-join ifnull
1个回答
0
投票

如果 p.cost 为 null(或低于代码中的 0),您可以进行条件求和。然后你将得到没有 p.cost 的产品数量(如果为 0,则所有产品都有成本)

SELECT m.name, p.quantity, p.price, p.cost, SUM(p.quantity) AS total_quantity, 
    SUM(p.price*p.quantity) AS total_price, SUM(p.cost*p.quantity) AS total_cost, 
    sum(case when p.cost is null then 1 else 0 end) 
FROM manufacturer m 
LEFT JOIN product p ON m.manufacturer_id = p.manufacturer_id 
GROUP BY m.manufacturer_id 
ORDER by m.name
© www.soinside.com 2019 - 2024. All rights reserved.