我有两个表, payment_method 和 product_language 。 product_language 表有包含可用房间总数的 Total_Room 列,payment_method 表有包含预订房间的 Room_Booked 列。
当我们获取 product_language 数据时,我想要来自 payment_method 的 Room_Booked 总和。如果 room_booked 为空,则 sum=0 。
这是我尝试的查询,但即使 Room_Booked 不是 0,它也只给出一条记录和 sum=0。
感谢您的帮助。
SELECT Coalesce(Sum(payment_method.`room_booked`), 0),
`product_language`.*,
`payment_language`.* AS sum
FROM (`product_language`
LEFT JOIN payment_method
ON ( payment_method.`product_id` = product_language.`id` ))
最佳答案
SELECT `product_language`.*, `payment_language`.* , sum(coalesce(payment_method.`room_booked`), 0) as sum,
FROM (`product_language`
LEFT JOIN payment_method
ON ( payment_method.`product_id` = product_language.`id` ))
group by `product_language`.*, `payment_language`.*;
我相信您的 select 语句的顺序会影响您的结果。所以我把非聚合列放在你的聚合前面。这是一个很好的起点...
我还将 coalesce 切换到 sum,这样它就不会对 sum 进行 coalesce,如果 null 则对 room_booked 值进行 coalesce。
我添加了一个 group by 语句,以便您对返回行的各个实体进行汇总。
评论,可能需要比从产品语言中选择所有内容更具体,这将有助于清除任何不必要的分组列
关于mysql SUM 查询没有给出预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15369947/