使用 CASE 和 AVG 计算占比
CASE 语句会返回您在 THEN 子句中指定的任何值。配合聚合语句使用时,这是进行稳健计算和数据处理的强大工具。一个常见用法是将 CASE 放在 AVG 函数中,用来计算数据库中某类信息所占的比例。
下面是设置方式示例:
AVG(CASE WHEN condition_is_met THEN 1
WHEN condition_is_not_met THEN 0 END)
采用这种方法时,准确指定哪些记录计为 0 非常重要,否则结果可能不正确!
您的任务是统计各国家的胜、负、平数量。matches 表已过滤,只包含 2013/2014 和 2014/2015 赛季的所有比赛。
本练习是课程的一部分
SQL 中的数据处理
练习说明
- 在
AVG()函数内,完成CASE语句:检查m.home_goal是否不等于m.away_goal,若条件满足则赋值为0。 - 按相同方式对比
'2014/2015'赛季的主客队进球数,并将结果别名为ties_2014_2015。
交互式实操练习
通过完成这段示例代码来试试这个练习。
SELECT
c.name AS country,
-- Calculate the fraction of tied games in each season
___(___ ___ m.season='2013/2014' AND m.home_goal = m.away_goal THEN 1
WHEN m.season='2013/2014' AND m.home_goal ___ m.away_goal THEN ___
END) AS ties_2013_2014,
___(___ ___ m.season='2014/2015' ___ ___ = ___ ___ ___
WHEN m.season='2014/2015' ___ m.home_goal != m.away_goal THEN ___
___) AS ___
FROM country AS c
LEFT JOIN matches AS m
ON c.id = m.country_id
GROUP BY country;