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 简化年份的英文展示
相关推荐
fzb5QsS1p3 小时前
MySQL 事务的二阶段提交是什么?
数据库·mysql
清风徐来QCQ6 小时前
Lombok/SSM/devTools
数据库
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-04-05
前端·数据库·人工智能·经验分享·神经网络
2601_949814697 小时前
使用mysql报Communications link failure异常解决
数据库·mysql
搜佛说7 小时前
02-第2章-核心概念与架构
数据库·物联网·微服务·架构·边缘计算·iot
C'ᴇsᴛ.小琳 ℡8 小时前
高性能NoSQL
数据库·nosql
i220818 Faiz Ul9 小时前
动漫商城|基于springboot + vue动漫商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·动漫商城系统
iNgs IMAC9 小时前
redis 使用
数据库·redis·缓存
TDengine (老段)11 小时前
TDengine IDMP 可视化 —— 面板
大数据·数据库·人工智能·物联网·ai·时序数据库·tdengine
卓怡学长11 小时前
m315基于java的水果网上商城的开发与设计
java·数据库·spring·tomcat·maven·intellij-idea