SQL-重要常见关键字

sql 复制代码
select pay_ability,
 concat(
    round(
        sum(case when l.overdue_days is not NULL then 1 else 0 end )/count(*)*100,
        1
    ),
    '%'
 ) as overdue_ratio
from customer_tb as c
join loan_tb as l
on c.customer_id = l.customer_id
group by c.pay_ability
order by overdue_ratio desc
sql 复制代码
select 
    date_format(t.t_time,'%Y-%m') as time,
    round(sum(t.t_amount),1) as total
    from trade t
    join customer c
    on t.t_cus = c.c_id
    where 
        c.c_name = 'Tom'
        and t.t_type=1
        and year(t.t_time)=2023
    group by time
    order by time

1、聚合与计算sum()

  • 功能 :对指定字段的数值求和,属于聚合函数(常用于GROUP BY分组后计算每组的总和)。
  • 两段 SQL 中的应用
    • 第一段:sum(case when l.overdue_days is not NULL then 1 else 0 end) 对 "逾期标记(1/0)" 求和,得到逾期记录总数。
    • 第二段:sum(t.t_amount) 对交易金额求和,得到每组(每月)的总金额。
  • 使用要点 :聚合函数需与GROUP BY配合(或作用于全表),计算的是 "组内总和"。

2、条件判断case when

  • 功能 :实现条件判断(类似编程语言中的if-else),根据条件返回不同值,可用于行级别的逻辑处理。
  • SQL 中的应用
sql 复制代码
case when l.overdue_days is not NULL then 1 else 0 end

表示 "若逾期天数不为空(即逾期),则标记为 1;否则标记为 0"。

使用要点:

  • 语法为CASE WHEN 条件1 THEN 结果1 ELSE 结果2 END,可嵌套多个WHEN
  • 常与聚合函数配合(如SUM/COUNT),实现 "按条件统计"。

3、round()

  • 功能:对数值进行四舍五入,指定保留的小数位数。
  • 两段 SQL 中的应用
    • 第一段:round(..., 1) 对逾期率百分比保留 1 位小数(如35.23%35.2%)。
    • 第二段:round(sum(t.t_amount),1) 对总金额保留 1 位小数(如1250.671250.7)。
  • 使用要点 :语法为ROUND(数值, 小数位数),若小数位数为 0,则返回整数。

4、concat()

功能:将多个字符串(或可转换为字符串的数值)拼接为一个字符串。

第一段 SQL 中的应用

java 复制代码
concat(round(...), '%')

将四舍五入后的逾期率数值与 "%" 拼接(如35.235.2%)。

使用要点 :参数可以是字段、常量或计算结果,若其中一个参数为NULL,则整体返回NULL(需注意处理NULL)。

5、year()

  • 功能 :提取日期 / 时间字段中的年份(返回 4 位数字,如2023),属于日期处理函数。
  • 第二段 SQL 中的应用year(t.t_time)=2023 表示筛选出交易时间在 2023 年的记录。
  • 使用要点 :类似的函数还有MONTH()(提取月份)、DAY()(提取日),常用于按时间维度筛选数据。

6、date_format()

  • 功能 :将日期 / 时间字段(DATE/DATETIME等)转换为指定格式的字符串,用于自定义日期展示。
  • 第二段 SQL 中的应用date_format(t.t_time,'%Y-%m') as time 将交易时间格式化为 "年 - 月" 字符串(如2023-05)。
  • 使用要点
    • 格式符区分大小写:%Y(4 位年)、%y(2 位年)、%m(2 位数字月)、%M(英文月全称)。
    • 格式化后的结果为字符串,若需按时间排序,建议基于原始日期字段逻辑(但本例中%Y-%m字符串排序与时间顺序一致,可直接用)。

为了更清晰,我们把四种常见的 "年 - 月" 组合放在一起对比:

格式化表达式 年份格式 月份格式 示例输出(2023-05-15) 适用场景
%Y-%m 4 位(2023) 2 位数字(05) 2023-05 报表统计、时间排序(最常用)
%Y-%M 4 位(2023) 英文全称(May) 2023-May 英文场景的可读性展示
%y-%m 2 位(23) 2 位数字(05) 23-05 简化年份的场景(如内部短报表)
%y-%M 2 位(23) 英文全称(May) 23-May 简化年份的英文展示
相关推荐
薛定谔的算法8 小时前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend10 小时前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术11 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Raymond运维15 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉15 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud1 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
DemonAvenger2 天前
NoSQL与MySQL混合架构设计:从入门到实战的最佳实践
数据库·mysql·性能优化
AAA修煤气灶刘哥2 天前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql