当前位置: 首页 > news >正文

SQL知识点合集---第二弹

数据一 

 <select id="listPositionAuditCheckSample" resultType="net.nxe.cloud.content.server.entity.PositionAuditCheckSample"><trim prefixOverrides="union all"><if test="userSampleCount != null and userSampleCount > 0">select pat.position_id position_id, pat.id audit_idfrom (select t.creator,cast(concat('[',substring_index(group_concat(concat('"', t.audit_id, '"') order by rand()),',',#{userSampleCount}),']') as json) audit_idsfrom (select pat.position_id, max(pat.id) audit_id, pat.creatorfrom position_audit patwhere pat.creator > 1and pat.entry in ('AUDITING', 'RECHECKING')and pat.create_time between #{startDate} and date_add(#{endDate}, interval 86399 second)and pat.creator in (<foreach collection="auditors" item="auditor" separator=",">#{auditor}</foreach>)and pat.finished = 1 and pat.id = pat.`group`group by pat.position_id, pat.creator, date_format(pat.create_time, '%Y-%m-%d')) tinner join position pn on pn.id = t.position_id and pn.updater = t.creator and pn.source = 'USER'group by t.creator) tinner join position_audit pat on pat.creator = t.creatorand json_contains(t.audit_ids, concat('"', pat.id, '"'))</if><if test="captureExactSampleCount != null and captureExactSampleCount > 0">union allselect pat.position_id position_id, pat.id audit_idfrom (select t.creator,cast(concat('[',substring_index(group_concat(concat('"', t.audit_id, '"') order by rand()),',',#{captureExactSampleCount}),']') as json) audit_idsfrom (select pat.position_id, max(pat.id) audit_id, pat.creatorfrom position_audit patwhere pat.creator > 1and pat.entry in ('AUDITING', 'RECHECKING')and pat.create_time between #{startDate} and date_add(#{endDate}, interval 86399 second)and pat.creator in (<foreach collection="auditors" item="auditor" separator=",">#{auditor}</foreach>)and pat.finished = 1 and pat.id = pat.`group`group by pat.position_id, pat.creator, date_format(pat.create_time, '%Y-%m-%d')) tinner join position pnon pn.id = t.position_id and pn.updater = t.creator and pn.source = 'CAPTURED' and `vague` = 0group by t.creator) tinner join position_audit pat on pat.creator = t.creatorand json_contains(t.audit_ids, concat('"', pat.id, '"'))</if><if test="captureVagueSampleCount != null and captureVagueSampleCount > 0">union allselect pat.position_id position_id, pat.id audit_idfrom (select t.creator,cast(concat('[',substring_index(group_concat(concat('"', t.audit_id, '"') order by rand()),',',#{captureVagueSampleCount}),']') as json) audit_idsfrom (select pat.position_id, max(pat.id) audit_id, pat.creatorfrom position_audit patwhere pat.creator > 1and pat.entry in ('AUDITING', 'RECHECKING')and pat.create_time between #{startDate} and date_add(#{endDate}, interval 86399 second)and pat.creator in (<foreach collection="auditors" item="auditor" separator=",">#{auditor}</foreach>)and pat.finished = 1 and pat.id = pat.`group`group by pat.position_id, pat.creator, date_format(pat.create_time, '%Y-%m-%d')) tinner join position pnon pn.id = t.position_id and pn.updater = t.creator and pn.source = 'CAPTURED' and `vague` = 1group by t.creator) tinner join position_audit pat on pat.creator = t.creatorand json_contains(t.audit_ids, concat('"', pat.id, '"'))</if></trim></select>

知识点 

<trim>标签的使用

  • 作用:去除 SQL 片段开头多余的 UNION ALL

  • 示例

<trim prefixOverrides="union all"><if>...</if><if>...</if>
</trim>
  • 说明:如果第一个 <if> 条件不满足,生成的 SQL 不会以 UNION ALL 开头,避免语法错误。

GROUP_CONCAT + ORDER BY RAND()

  • 作用:将多个值拼接成字符串,并按随机顺序排序。

  • 示例

group_concat(concat('"', t.audit_id, '"') order by rand())

SUBSTRING_INDEX

  • 作用:截取字符串的前 N 个元素。

  • 示例

substring_index(group_concat(...), ',', #{userSampleCount})

CAST(... AS JSON)

  • 作用:将字符串转换为 MySQL 的 JSON 类型。

  • 示例

cast(concat('[', substring_index(...), ']') as json)

JSON_CONTAIN

  • 作用:检查 JSON 数组中是否包含某个值。

  • 示例

json_contains(t.audit_ids, concat('"', pat.id, '"'))

JSON数据类型处理

函数作用示例场景
JSON_ARRAY()创建 JSON 数组初始化订单状态历史
JSON_ARRAY_APPEND()向数组追加元素添加新状态
JSON_LENGTH()获取数组/对象长度限制状态历史长度
JSON_MERGE_PATCH()合并并覆盖重复键(对象)更新物流信息
JSON_EXTRACT()提取 JSON 中的值查询最新状态
JSON_CONTAINS_PATH()检查 JSON 中是否存在指定路径验证物流信息是否存在
JSON_MERGE()合并 JSON 文档(兼容旧版本)合并用户备注(注意数组行为)
CREATE TABLE orders (order_id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,status_history JSON COMMENT '状态变更历史(JSON数组)',extra_info JSON COMMENT '额外信息(JSON对象)'
);-- JSON_ARRAY()、JSON_OBJECT
INSERT INTO orders (user_id, status_history, extra_info)
VALUES (1001,JSON_ARRAY('created'),  JSON_OBJECT('note', '请尽快发货') 
);-- JSON_ARRAY_APPEND:追加数据
UPDATE orders
SET status_history = JSON_ARRAY_APPEND(status_history, '$', 'ios')
WHERE order_id = 1;-- JSON_MERGE_PATCH:追加数据
UPDATE orders
SET extra_info = JSON_MERGE_PATCH(extra_info,'{"logistics": {"company": "顺丰", "tracking_no": "SF123456"}}'
)
WHERE order_id = 1;-- JSON_EXTRACT() 提取最后一个状态
SELECTJSON_EXTRACT(status_history, '$[last]') AS last_status
FROM orders
WHERE order_id = 1;-- JSON_CONTAINS_PATH() 验证extra_info中是否有物流信息
SELECTJSON_CONTAINS_PATH(extra_info, 'one', '$.logistics') AS has_logistics
FROM orders
WHERE order_id = 1;-- JSON_MERGE:会合并为数组
UPDATE orders
SET extra_info = JSON_MERGE(extra_info,'{"note": "已加急处理"}'
)
WHERE order_id = 1;-- JSON_LENGTH()长度
SELECT * from orders where JSON_LENGTH(status_history)>2

 

http://www.xdnf.cn/news/191125.html

相关文章:

  • 阿里qiankun微服务搭建
  • (leetcode)力扣100 3.最长连续序列(哈希?排序)
  • 【JS事件循环机制event-loop】
  • Rmarkdown输出为pdf的方法与问题解决
  • 数字图像处理 -- 眼底图像血管分割方法
  • 后缀数组~
  • 聊一聊接口自动化测试的稳定性如何保障
  • 在 IDEA 中写 Spark 程序:从入门到实践
  • 反向代理、负载均衡与镜像流量:原理剖析、区别对比及 Nginx 配置实践
  • 2025医疗领域AI发展五大核心趋势与路线研究
  • 在Linux系统中安装MySQL,二进制包版
  • 第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
  • 云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor
  • 【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
  • yolov8+kalman 实现目标跟踪统计人流量
  • redis+lua+固定窗口实现分布式限流
  • 八大排序——直接插入排序/希尔排序
  • Spring Cloud初探之自定义负载均衡策略(五)
  • 让数据优雅落地:用 serde::Deserialize 玩转结构体实体
  • CasaOS上部署1Panel开源运维面板远程在线访问配置实操指南
  • K8s新手系列之K8s中的资源
  • 【杂谈】-人工智能驱动的网络安全威胁:新一代网络钓鱼
  • Azure 数字孪生是什么?
  • ​​HTTP vs HTTPS:传输协议的安全演进与核心差异​
  • 8.Android(通过Manifest配置文件传递数据(meta-data))
  • 近地卫星网络 (Low Earth Orbit Satellite Networks)入门学习笔记
  • Transformer数学推导——Q26 推导多语言Transformer中语言间注意力共享的参数效率公式
  • C语言----操作符详解(万字详解)
  • python 线程池顺序执行
  • 二叉树的所有路径(回溯算法基础)