我想在交易日期之间输出库存,如果没有交易日期,它仍然应该在MySQL上显示库存系统的所有库存
我当前的查询:我想在交易日期之间输出库存,如果没有交易日期,它仍然应该在MySQL上显示库存系统的所有库存,mysql,Mysql,我当前的查询: select stock.id, stock.name, sum(amount) from stock left join stock_detail on stock.id = stock_detail.stock_id where transact_at BETWEEN ('2018-06-15') and ('2018-06-16') group by stock.id 但它不会显示在库存明细表中没有条目的其他库存 表1:库存 id name 1 chicken
select stock.id, stock.name, sum(amount) from stock
left join stock_detail on stock.id = stock_detail.stock_id
where transact_at BETWEEN ('2018-06-15') and ('2018-06-16')
group by stock.id
但它不会显示在库存明细表中没有条目的其他库存
表1:库存
id name
1 chicken
2 beef
3 pork
4 drink
表2:库存详情
id stock_id type amount transact_date
1 1 in 1000 15/06/2018
2 1 in 500 15/06/2018
3 2 in 300 16/06/2018
我想要输出
id name total_amount
1 chicken 1500
2 beef 300
3 pork 0
4 drink 0
您必须将日期谓词从
WHERE
移动到ON
:
select stock.id, stock.name, coalesce(sum(amount) , 0)
from stock
left join stock_detail
on stock.id = stock_detail.stock_id
and transact_date BETWEEN ('2018-06-15') and ('2018-06-16')
group by stock.id
@webdev很高兴我能帮忙。请接受这个或任何其他答案,如果它有助于解决您的问题。嗨@Giorgos Bestos哦,我还忘了一件事,如果我想添加“where sum(amount)>1000”怎么办?我尝试了,但我得到了一个无效的组函数select stock.id,stock.name,coalesce(sum(amount),0)from stock left join stock_detail on stock.id=stock_detail.stock_id,交易日期介于('2018-06-15')和('2018-06-16'),其中sum(amount)库存超过1000组。id@webdev您需要在
HAVING
子句中添加谓词:。。。按stock.id分组,总和(金额)>1000
。