MySQL统计各参赛队对应结果字段为NULL的数量实现方法
需求背景
MySQL数据表game1结构如下:
player1:对阵左侧队伍名称player2:对阵右侧队伍名称result_1:player1对应的比赛结果result_2:player2对应的比赛结果
需要统计每个参赛队伍作为对阵方时,自身对应结果字段为NULL的总次数,最终返回player(队伍名称)、count_null(NULL值计数)两列结果,预期结果为:team1计数0、team2计数1、team3计数2。
实现方案
核心逻辑是将左右两侧的对阵队伍纵向拆分为独立行,每行仅判断当前位置队伍对应的结果字段是否为NULL,再按队伍分组聚合计数即可,具体SQL如下:
SELECT player, SUM(is_null_flag) AS count_null FROM ( -- 提取左侧对阵队伍,匹配自身结果字段的NULL状态 SELECT player1 AS player, IF(result_1 IS NULL, 1, 0) AS is_null_flag FROM game1 UNION ALL -- 提取右侧对阵队伍,匹配自身结果字段的NULL状态 SELECT player2 AS player, IF(result_2 IS NULL, 1, 0) AS is_null_flag FROM game1 ) AS temp GROUP BY player;
注意事项
合并两侧数据时必须使用
UNION ALL,不能用UNION。UNION会对合并后的结果做去重操作,会导致重复出现的NULL记录被过滤,最终统计值偏小。
内容的提问来源于stack exchange,提问作者Jinyeong
相关产品推荐
相关产品推荐

