select age_cut
      ,count(1) as "number"
from(select case when age is null or age < 25 then '25岁以下'
                 when age >=25 then '25岁及以上'
             end  as age_cut
            ,age
       from user_profile) t
group by age_cut;
  • case when

  • 字段的别名

结论:通常不需要加引号,但在特定情况下必须加。

在大多数常规场景下,不加引号是标准且推荐的写法。

什么时候【不需要】加引号?(90% 的情况)

如果你的别名满足以下条件,直接写即可,清晰又规范:

  • 只包含字母、数字和下划线(a-z, A-Z, 0-9, _)。
  • 不以数字开头。
  • 不是 SQL 的保留关键字(如 count, order, group, select 等)。
  • 不包含空格或特殊符号(如 +, -, (), %)。

什么时候【必须】加引号?

如果别名包含以下情况,必须加引号,否则 SQL 会报错或执行错误:

包含空格

包含特殊字符

使用了保留关键字

需要区分大小写

🌟 最佳实践建议:

  • 首选方案:尽量起简单的英文名(字母+下划线),这样完全不需要引号,兼容性最好,迁移数据库也不会出错。👍 user_count, avg_gpa, total_amount
  • 次选方案:如果必须用特殊字符或空格:在 MySQL/Hive/Spark 中用反引号:`User Count`

在 PostgreSQL/Oracle 中用双引号:"User Count"

总结

常规别名(如 user_num):不要加引号

特殊别名(含空格、特殊符、关键字):必须加引号

引号类型:MySQL/Hive 用 `,Oracle/PG 用 "

  • 表的别名 子查询

在 SQL 标准(ANSI SQL) 以及几乎所有的主流数据库(MySQL, PostgreSQL, Oracle, SQL Server, Hive, Spark SQL 等)中:

任何出现在 FROM 子句中的子查询(派生表),都必须拥有一个别名。

只要看到 FROM 或 JOIN 后面紧跟着一个 左括号 ( 开始子查询,那么在这个子查询的 右括号 ) 后面,一定要跟一个别名