记录 SQL 语句 遇到的错误 | 行列变换

计算25岁以上和以下的用户数量

https://www.nowcoder.com/practice/30f9f470390a4a8a8dd3b8e1f8c7a9fa

找错误

先看错误代码:

select
    (
        case age
            when age >= 25 then '25岁及以上'
            else '25岁以下'
        end
    ) as age_cut,
    count(*) `number`
from
    user_profile
group by
    age_cut;

再看正确代码:

select
    (
        case
            when age >= 25 then '25岁及以上'
            else '25岁以下'
        end
    ) as age_cut,
    count(*) `number`
from
    user_profile
group by
    age_cut;

细心可以发现:第一个sql 的 case 后面跟了一个 age,这就是错误点!!!

第一个 SQL 错误原因

在 SQL 中,CASE 表达式有两种形式:简单 CASE 表达式和搜索 CASE 表达式。

  • 简单 CASE 表达式:格式为 CASE 表达式 WHEN 值1 THEN 结果1 WHEN 值2 THEN 结果2 ... ELSE 结果N END,它会将 CASE 后面的表达式与每个 WHEN 后面的值进行精确比较。
  • 搜索 CASE 表达式:格式为 CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 ... ELSE 结果N END,它会依次计算每个 WHEN 后面的条件表达式。

在第一个 SQL 里,使用了简单 CASE 表达式的语法,但 when age >= 25 并非一个具体的值,而是一个条件表达式,这就导致了语法错误,使得查询无法得到正确的结果。

第二个 SQL 正确原因

第二个 SQL 使用了搜索 CASE 表达式,WHEN age >= 25 是一个合法的条件表达式,SQL 会依次计算每个 WHEN 后面的条件,当条件为真时返回对应的结果。所以这个 SQL 语法正确,可以正常执行,它会根据 user_profile 表中用户的年龄进行分组统计,将年龄大于等于 25 岁的用户归为一组,小于 25 岁的用户归为另一组,并分别统计每组的用户数量。

SQL练练练 文章被收录于专栏

记录自己sql的每一步提升!

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
06-23 11:28
门头沟学院 Java
牛客91966197...:也有可能是点拒绝的时候自动弹的话术
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务