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 简化年份的英文展示
相关推荐
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪3 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)5 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349845 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE6 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102166 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎6 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP6 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t7 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
安当加密7 小时前
Nacos配置安全治理:把数据库密码从YAML里请出去
数据库·安全