如何实现无参会记录时返回0,有记录时返回SUM(guests)结果
解决方案
你的问题出在使用了内连接(JOIN),它只会返回两张表中匹配的记录,没有参会记录的活动会被直接过滤掉,导致COALESCE根本没机会处理那些缺失的行。
要解决这个问题,需要以wp_posts为主表,使用**左连接(LEFT JOIN)**关联participants,确保所有指定的活动都能被包含在结果中,再用COALESCE把SUM返回的NULL结果转为0:
SELECT w.ID, w.post_title, COALESCE(SUM(p.guests), 0) AS total_guests FROM wp_posts w LEFT JOIN participants p ON w.ID = p.eventID WHERE w.ID IN(22, 30, 34, 38, 39, 40) GROUP BY w.ID, w.post_title
关键说明:
- LEFT JOIN:以
wp_posts的指定活动为基础,即使participants中没有对应活动的参会记录,也会保留该行,此时p.guests字段值为NULL。 - COALESCE(SUM(p.guests), 0):当
SUM(p.guests)返回NULL(即无参会记录)时,自动替换为0;有记录时则返回实际的嘉宾总数。 - GROUP BY:按活动ID和标题分组,确保每个活动对应一行结果。
执行这条查询后,会得到你期望的输出:
+----+------------+--------------+ | ID | post_title | total_guests | +----+------------+--------------+ | 22 | Christmas | 15 | | 30 | New Year | 3 | | 34 | Birthday | 0 | | 38 | Easter | 0 | | 39 | Ruhetag | 0 | | 40 | St Patrick | 0 | +----+------------+--------------+
内容的提问来源于stack exchange,提问作者cranked_coder
相关产品推荐
相关产品推荐

