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 简化年份的英文展示
相关推荐
wtsolutions1 分钟前
Sheet-to-Doc模板设计最佳实践:创建专业的Word模板
前端·javascript·数据库
辞砚技术录2 分钟前
MySQL面试题——索引、B+树
数据结构·数据库·b树·面试
风吹落叶花飘荡6 分钟前
mysql数据库创建新用户,并只给其必要的权限
数据库·mysql
悦数图数据库18 分钟前
“复旦大学—杭州悦数先进金融图技术校企联合研究中心年度总结会”圆满举行
大数据·数据库·人工智能
TDengine (老段)26 分钟前
TDengine Rust 连接器入门指南
大数据·数据库·物联网·rust·时序数据库·tdengine·涛思数据
oMcLin32 分钟前
如何在Oracle Linux 8.5上配置并优化Oracle RAC集群,确保企业级数据库的高可用性与负载均衡?
linux·数据库·oracle
YuanYWRS34 分钟前
ArcGIS基础:如何在字段计算器里批量替换某个字段的某些部分内容
数据库·批量替换
Dontla36 分钟前
IndexedDB(浏览器原生NoSQL非关系型数据库)浏览器数据库、chrome数据库、idb工具库
数据库·chrome·nosql
Li_76953240 分钟前
Redis 进阶(六)—— 集群
数据库·redis·缓存
德彪稳坐倒骑驴1 小时前
Hive SQL常遗忘的命令
hive·hadoop·sql