SELECT
CASE
WHEN age < 20 THEN '20以下'
WHEN age >= 20 AND age <= 40 THEN '20-40'
ELSE '40以上'
END AS age_group,
sex,
COUNT(*) AS count
FROM
studet
GROUP BY
age_group, sex
ORDER BY
age_group, sex;
- SELECT: 选择要返回的列或表达式。在这个查询中,我们选择了三个列:age_group(使用 CASE 表达式生成的年龄段)、sex 和 COUNT(*)(用于计算每个年龄段和性别的人数)。
- CASE: 用于条件判断并返回不同的值。在这个查询中,我们使用 CASE 表达式将年龄划分为不同的年龄段。
- WHEN: CASE 表达式中的关键字,用于指定条件。
- THEN: CASE 表达式中的关键字,用于指定满足条件时返回的结果。
- ELSE: CASE 表达式中的关键字,用于指定所有条件都不满足时返回的默认结果。
- AS: 用于给查询结果中的列或表达式指定别名。在这个查询中,我们使用 AS 关键字给 CASE 表达式的结果起了一个别名,即 age_group。
- FROM: 指定要查询的数据源,即表名。在这个查询中,我们从名为 students 的表中查询数据。
- GROUP BY: 按照指定的列进行分组。在这个查询中,我们按照 age_group 和 sex 列进行分组。
- ORDER BY: 按照指定的列对结果集进行排序。在这个查询中,我们按照 age_group 和 sex 列进行升序排序。在这个语法结构中,CASE 表达式首先会对 condition1 进行判断,如果满足则返回 result1;如果不满足,则继续判断 condition2,以此类推。如果所有条件都不满足,则返回 default_result(可选)。
除了上述简单形式外,CASE 表达式还可以嵌套使用,也可以作为查询结果的一部分,并且可以用于各种复杂的条件逻辑。
在你之前提供的例子中,我们使用了 CASE 表达式来根据学生的年龄划分为不同的年龄段,并为每个年龄段指定一个别名。具体来说,当年龄小于 20 岁时返回 '20以下',当年龄在 20 到 40 岁之间时返回 '20-40',否则返回 '40以上',并将结果赋予别名 age_group。
总的来说,CASE 表达式在 SQL 中扮演着非常重要的角色,能够实现灵活的条件判断和结果返回,为数据处理和分析提供了很大的便利。