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 简化年份的英文展示
相关推荐
马克Markorg5 小时前
常见的向量数据库和具有向量数据库能力的数据库
数据库
Coder_Boy_7 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy7 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
数据知道9 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_12498707539 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha9 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_9 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance9 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
此生只爱蛋10 小时前
【Redis】主从复制
数据库·redis
马猴烧酒.10 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库