实用SQL小总结

WHERE 条件 column 为纯英文字符 或 不包含任何字符

语法:

SELECT * FROM your_table WHERE REGEXP(your_column,'^[A-Za-z]+$');
SELECT * FROM your_table WHERE NOT REGEXP(your_column,'^[A-Za-z]+$');

例:

SELECT DISTINCT t.pldlibho FROM kibb_pldlyw t WHERE REGEXP_LIKE(t.pldlibho, '[a-zA-Z]+$');
-- 不包含任何英文字符
SELECT DISTINCT t.pldlibho FROM kibb_pldlyw t WHERE NOT REGEXP_LIKE(t.pldlibho, '[a-zA-Z]+$');

WHERE 条件 column 为纯数字 或 不包含任何数字

语法:

SELECT * FROM your_table WHERE REGEXP(your_column,'^[0-9]+$');
SELECT * FROM your_table WHERE NOT REGEXP(your_column,'^[0-9]+$');

例:

SELECT DISTINCT t.pldlibho FROM kibb_pldlyw t WHERE REGEXP_LIKE(t.pldlibho, '^[0-9]+$');
--不包含任何数字
SELECT DISTINCT t.pldlibho FROM kibb_pldlyw t WHERE NOT REGEXP_LIKE(t.pldlibho, '^[0-9]+$');

PARTITION BY 的简单使用

部分内容转载至:
https://blog.csdn.net/weixin_44711823/article/details/135966741?fromshare=blogdetail&sharetype=blogdetail&sharerId=135966741&sharerefer=PC&sharesource=FuTian0715&sharefrom=from_link

更详细的讲解请点击链接查看。

说明:

partition by窗口函数 和 group by分组的区别:
partition by关键字是分析性函数的一部分,它和聚合函数(如group by)不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录。
partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组。
partition by与group by不同之处在于前者返回的是分组里的每一条数据,并且可以对分组数据进行排序操作。后者只能返回聚合之后的组的数据统计值的记录。
partition by相比较于group by,能够在保留全部数据的基础上,只对其中某些字段做分组排序(类似excel中的操作),而group by则只保留参与分组的字段和聚合函数的结果; 简单来说窗口函数对部分数据进行排序、计算等操作,group by对一组值进行聚合,即窗口函数是每一行都会保留,group by是从多行浓缩为少数行。

语法:

<窗口函数> over ( partition by<用于分组的列名> order by <用于排序的列名>)

窗口函数:

专用窗口函数: rank(), dense_rank(), row_number()
聚合函数 : sum(), max(), min(), count(), avg() 等

例:

SELECT m.qyuezhao,
       CASE m.dxnqyzht
         WHEN '3' THEN
          '欠费'
         WHEN '4' THEN
          '暂停'
       END
  FROM (SELECT Row_number() over(PARTITION BY t.dxnqyzht ORDER BY t.qyuezhao) rn,
               t.qyuezhao,
               t.dxnqyzht
          FROM kibb_dxinqy t
         WHERE t.dxnqyzht IN ('3', '4')) m
 WHERE rn <= 10;
SELECT *,rank() over(partition by type order by price desc) as  mm from commodity;
SELECT *,row_number() over(partition by type order by price desc) as  mm from commodity;
SELECT *,dense_rank() over(partition by type order by price desc) as  mm from commodity;

在这里插入图片描述
从以上结果来看:
rank()函数:如果存在并列名次的行,会占用下一个名次的位置,比如苹果的组内排名 1,2,3,4, 但是由于有两个是并列的,所以显示的排名是 1,1,3,4 ,其中 2 的位置还是被占用了
row_number()函数:不考虑并列的情况,此函数即使遇到了price 相同的情况,还是会默认排出一个先后来
dense_rank()函数:如果存在并列名次的行,不会占用下一个名次的位置,例如图片的最后显示的是 1,1,2,3


json格式字符串处理相关函数

IS JSON

判断某个字段是否为有效json

select * from kapb_jioybw bw where bw.quanjuls = 'GFTS002021051100001685916' and bw.jiaoyirq = '20210511';

在这里插入图片描述
在这里插入图片描述

JSON_VALUE

JSON_VALUE只支持scalar value,即只返回一行一列,通常用在select语句或where条件中。
JSON_VALUE接受两个参数,即JSON文档(document)和到指定属性的路径(path),返回值可以格式化。
JSON_VALUE支持错误处理,例如当指定的path不正确(如路径不存在,大小写不匹配),返回多个值(非scalar)时。错误处理方式有3种,默认为返回空值(NULL ON ERROR),其它为返回指定默认值(DEFAULT on ERROR),报错(ERROR ON ERROR)。

NULL演示

-- 错误示例1:Address返回多个属性,不是scalar. Address改为Address.city就正确了。
select JSON_VALUE(xnybwvar ,'$.ShippingInstructions.Address')
 from kapb_jioybw p
 where JSON_VALUE(xnybwvar ,'$.PONumber' returning NUMBER(10)) = 1
 and p.quanjuls = 'GFTS002021051100001685917' and p.jiaoyirq = '20210511';

在这里插入图片描述

-- 错误示例2:大小写错误,Name应为name
select JSON_VALUE(xnybwvar ,'$.ShippingInstructions.Name')
 from kapb_jioybw p
 where JSON_VALUE(xnybwvar ,'$.PONumber' returning NUMBER(10)) = 450
 and p.quanjuls = 'GFTS002021051100001685917' and p.jiaoyirq = '20210511';

在这里插入图片描述

-- DEFAULT on ERROR演示

在这里插入图片描述

-- ERROR ON ERROR演示

在这里插入图片描述

-- 以上所的错误处理只针对运行时错误,例如以下Address前的.写成了,号,则不在以上所说错误处理的范畴:

在这里插入图片描述

JSON_QUERY

JSON_QUERY是JSON_VALUE的补充,参数个数与类型与其一样,但可返回一个对象或array。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输出中省去了很多空格,但为了美观,你也可以加PRETTY关键字以添加缩进和对齐:
在这里插入图片描述
下例为使用array index以返回array中的一个对象:
在这里插入图片描述
注意JSON_QUERY只能返回对象,如果path指定是一个scalar值,则默认返回空值,例如:
在这里插入图片描述
JSON_QUERY的错误处理有三种,默认为NULL ON ERROR, ERROR ON ERROR与JSON_VALUE类似,EMPTY ON ERROR返回空的array。
最常见的错误是返回值不是object或array,而是scalar值。
不过还有一种特殊方式,可将scalar转换为array:
在这里插入图片描述
利用WITH ARRAY WRAPPER将结果强制转换为array
在这里插入图片描述

JSON_TABLE

第一个查询显示了如何从文档中最多发生一次的值投射一组列。值可能来自任何级别的嵌套,只要它们不来自组的键,或来自阵列的后裔,除非使用索引来识别数组中的一个项目。

select M.*
 from kapb_jioybw p,
      JSON_TABLE(p.xnybwvar,
                 '$' columns PO_NUMBER NUMBER(10) path '$.PONumber',
                 REFERENCE VARCHAR2(30 CHAR) path '$.Reference',
                 REQUESTOR VARCHAR2(32 CHAR) path '$.Requestor',
                 USERID VARCHAR2(10 CHAR) path '$.User',
                 COSTCENTER VARCHAR2(16 CHAR) path '$.CostCenter',
                 TELEPHONE VARCHAR2(16 CHAR) path
                 '$.ShippingInstructions.Phone[0].number') M
 where p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511'
  and PO_NUMBER between 1 and 2;

在这里插入图片描述
如果输出的列仍是对象或array,则可使用嵌套(NESTED PATH):

select M.*
 from kapb_jioybw p,
      JSON_TABLE(p.xnybwvar,
                 '$' columns(PO_NUMBER NUMBER(10) path '$.PONumber',
                         REFERENCE VARCHAR2(30 CHAR) path '$.Reference',
                         REQUESTOR VARCHAR2(32 CHAR) path '$.Requestor',
                         USERID VARCHAR2(10 CHAR) path '$.User',
                         COSTCENTER VARCHAR2(16) path '$.CostCenter',
                         NESTED PATH '$.LineItems[*]'
                         columns(ITEMNO NUMBER(16) path '$.ItemNumber',
                                 DESCRIPTION VARCHAR2(32 CHAR) path
                                 '$.Part.Description',
                                 UPCCODE VARCHAR2(14 CHAR) path
                                 '$.Part.UPCCode',
                                 QUANTITY NUMBER(5, 4) path '$.Quantity',
                                 UNITPRICE NUMBER(5, 2) path
                                 '$.Part.UnitPrice'))) M
 where p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511'
  and PO_NUMBER between 1 and 2;

在这里插入图片描述
JSON_TABLE常用于建立关系型视图,然后可以用标准的SQL语句操作。

create or replace view json_test_view
as
select M.*
 from kapb_jioybw p,
      JSON_TABLE(p.xnybwvar,
                 '$' columns(PO_NUMBER NUMBER(10) path '$.PONumber',
                         REFERENCE VARCHAR2(30 CHAR) path '$.Reference',
                         REQUESTOR VARCHAR2(32 CHAR) path '$.Requestor',
                         USERID VARCHAR2(10 CHAR) path '$.User',
                         COSTCENTER VARCHAR2(16) path '$.CostCenter',
                         NESTED PATH '$.LineItems[*]'
                         columns(ITEMNO NUMBER(16) path '$.ItemNumber',
                                 DESCRIPTION VARCHAR2(32 CHAR) path
                                 '$.Part.Description',
                                 UPCCODE VARCHAR2(14 CHAR) path
                                 '$.Part.UPCCode',
                                 QUANTITY NUMBER(5, 4) path '$.Quantity',
                                 UNITPRICE NUMBER(5, 2) path
                                 '$.Part.UnitPrice'))) M
 where p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511'
  and PO_NUMBER between 1 and 2;

定义完这些视图后,开发者就可以完全利用SQL的能力了。
在这里插入图片描述

JSON_EXISTS

用在where语句中,和EXISITS类似,测试JSON document中是否存在指定的path。

select count(*)
 from kapb_jioybw p
 where JSON_EXISTS(p.xnybwvar, '$.ShippingInstructions.Address.state')
  and p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511'

在这里插入图片描述
JSON_EXISTS可以区分key不存在或key存在,value不存在或为空的情形,试比较以下输出:

select JSON_VALUE(p.xnybwvar, '$.ShippingInstructions.Address.county'),
      count(*)
 from kapb_jioybw p
 where p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511'
 group by JSON_VALUE(p.xnybwvar, '$.ShippingInstructions.Address.county');

在这里插入图片描述

select JSON_VALUE(p.xnybwvar, '$.ShippingInstructions.Address.county'),
      count(*)
 from kapb_jioybw p
 where p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511'
  and JSON_EXISTS(p.xnybwvar, '$.ShippingInstructions.Address.county')
 group by JSON_VALUE(p.xnybwvar, '$.ShippingInstructions.Address.county');

在这里插入图片描述
JSON_EXISTS还支持predicate,就是可以带条件。

select p.xnybwvar
 from kapb_jioybw p
 where JSON_EXISTS(p.xnybwvar,
                  '$?(@.PONumber == $PO_NUMBER)' passing 1 as "PO_NUMBER")
  and p.quanjuls = 'GFTS002021051100001685917'
  and p.jiaoyirq = '20210511';

在这里插入图片描述

SELECT COUNT(1)
  FROM kapb_jioybw p
 WHERE JSON_EXISTS(p.xnybwvar,
                   '$?(@.PONumber == $PO_NUMBER)' passing 1 AS "PO_NUMBER")
   AND p.quanjuls = 'GFTS002021051100001685917'
   AND p.jiaoyirq = '20210511';

JSON索引

使用JSON_VALUE创建的唯一索引,基于的值必须是scalar,而且必须唯一。可以是B-Tree索引或Bitmap索引。

create unique index PO_NUMBER_IDX
   on kapb_jioybw p (
         JSON_VALUE(
            p.xnybwvar,'$.PONumber' returning NUMBER(10) ERROR ON ERROR NULL ON EMPTY
         )
      )

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/884855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LLM - 使用 vLLM 部署 Qwen2-VL 多模态大模型 (配置 FlashAttention) 教程

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142528967 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 vLLM 用…

02-ZYNQ linux开发环境安装,基于Petalinux2022.2和Vitis2022.2

petalinux安装 Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件&#xff0c;包括了 u-boot、Linux Kernel、device-tree、rootfs 等源码和库&#xff0c;以及 Yocto recipes&#xff0c;可以让客户很方便的生成、配置、编译及自定义 Linux 系统。Petalinux 支持 Ver…

uniapp EChars图表

1. uniapp EChars图表 &#xff08;1&#xff09;Apache ECharts 一个基于 JavaScript 的开源可视化图表库   https://echarts.apache.org/examples/zh/index.html &#xff08;1&#xff09;官网图例 &#xff08;2&#xff09;个人实现图例 1.1. 下载echart 1.1.1. 下…

docker - 迁移和备份

文章目录 1、docker commit1.1、查询 容器 docker ps1.2、docker commit zookeeper zookeeper:3.4.13 2、docker save -o2.1、宿主机 切换到 /opt 目录下2.2、将镜像保存到 宿主机/opt目录下 3、docker load -i 对某一个容器修改完毕以后&#xff0c;我们可以把最新的容器部署到…

【文心智能体 | AI大师工坊】如何使用智能体插件,完成一款旅游类智能体的开发,来体验一下我的智能体『​​​​​​​厦门CityWalk』

目录 1.1、智能体运行效果 1.2、创作灵感来源 1.3、如何制作智能体 1.4、可能会遇到的几个问题 1.5、快速调优指南 『厦门CityWalk&#x1f680;』我的优质智能体&#xff1a;https://0nxj3k.smartapps.baidu.com/?_swebfr1&_swebScene3621000000000000 在当今这个全…

Bytebase 2.22.3 - 一键回滚 PostgreSQL DML 变更

&#x1f680; 新功能 支持一键回滚 PostgreSQL DML 变更。 &#x1f384; 改进 优化 DML 事前备份和回滚体验&#xff1a; 引导用户创建 bbdataarchive 数据库。如果没有 bbdataarchive 数据库&#xff0c;无法开启备份功。用户现在可以在创建工单之后开启或关闭备份功能&a…

Python | Leetcode Python题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; class Solution:def pathSum(self, root: TreeNode, targetSum: int) -> int:prefix collections.defaultdict(int)prefix[0] 1def dfs(root, curr):if not root:return 0ret 0curr root.valret prefix[curr - targetSum]prefix[cu…

ROS学习笔记(四):使用 `ros2 run usb_cam usb_cam_node_exe` 启动 USB 摄像头

文章目录 前言1 安装 usb_cam 包2 启动 USB 摄像头3 订阅相机发布的节点信息并进行可视化3.1 使用 rqt_image_view3.2 使用 image_view3.3 使用 rviz 4 常见问题与解决方案4.1 摄像头未被识别4.2 相机显示异常4.3 如何指定不同的相机4.4 摄像头参数调整 5. 调试信息 5. 结论 前…

9.5K Star,开源在线网盘

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 随着云存储的广泛应用&#xff0c;越来越多的人和企业需要一个简单、…

用Promise实现前端并发请求

/** * 构造假请求 */ async function request(url) {return new Promise((resolve) > {setTimeout(() > {resolve(url);},// Math.random() * 500 800,1000,);}); }请求一次&#xff0c;查看耗时&#xff0c;预计应该是1s&#xff1a; async function requestOnce() {c…

docker安装Portainer CE

docker安装Portainer CE 教程 1、简介 Portainer 是一款开源的容器管理工具&#xff0c;旨在帮助用户更轻松地管理 Docker 环境。无论您是 Docker 新手还是经验丰富的开发人员&#xff0c;Portainer 都提供了直观的用户界面&#xff0c;使您能够方便地创建、部署和监控容器。…

黑马头条day5- 延迟任务精准发布文章

这个过程主要是流程负责 但是我没有仔细的过所有的流程 需要多刷几遍 今天只是照着md文档执行了一下 运行起来没差错 主要实现文章定时发布 通过schedule模块作为延迟队列的任务 通过redis实现的延迟任务 具体 实现还要在多走几遍流程 逻辑一点不清楚 没看网课 这节要多看几遍…

Redis 篇-深入了解 Redis 中的 RESP 通信协议与内存回收(过期 key 处理、内存淘汰策略)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Redis 通信协议 - RESP 协议 2.0 Redis 内存回收 2.1 Redis 内存回收 - 过期 key 处理 2.1.1 Redis 是如何知道一个 Key 是否过期呢&#xff1f; 2.1.2 是不是 TT…

GESP等级考试C++二级-数学函数

C的cmath库中有丰富的数学函数&#xff0c;通过这些函数可以进行相应的数学计算。 1 cmath库的导入 通过import指令导入cmath库&#xff0c;代码如图1所示。 图1 导入cmath库的代码 2 abs()函数 abs()函数用来获取指定数的绝对值&#xff0c;代码如图2所示。 图2 abs()函数…

X86下一文带你构建Apollo9.0运行环境(基于Ubuntu20.04避坑版)

X86下一文带你构建Apollo9.0运行环境基于Ubuntu20.04避坑版 前言准备安装基础软件1.安装Docker19.03安装Nvidia驱动安装配置Nvidia container toolkit 下载Apollo源码&#xff08;笔者下载的是releases下9.0.0版本&#xff0c;大家可以参考&#xff09;编译Apollo9.0下载资源包…

vue-cli,element-plus,axios,proxy

一、vue-cli vue-cli俗称vue脚手架&#xff0c;是vue官方提供的快速生成vue 工程化项目的工具。 1.官网&#xff1a;https://cn.vuejs.org/ 中文官网: https://cli.vuejs.org/zh/ 特点&#xff1a;基于webpack&#xff0c;功能丰富且易于扩展&#xff0c;支持创建vue2和vu…

对话总结:Scale AI的创始人兼CEO Alex Wang

AI的三大支柱 计算:主要由大公司如NVIDIA推动。算法:顶尖实验室如OpenAI主导。数据:Scale致力于推动数据进展。前沿数据的重要性 与人类智能相比较,前沿数据是AI发展的关键。互联网数据是机器与人类合作的结果。语言模型的发展 第一阶段:原始的Transformer论文和GPT的小规…

一书直接讲透自然语言处理《Getting Started with Google BERT_ Build and train》

《Getting Started with Google BERT: Build and Train》是一本面向初学者和中级读者的指南&#xff0c;旨在帮助他们理解和使用Google的BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;模型。BERT是近年来自然语言处理&#xff08;NLP&…

Linux下的git开篇第一文:git的意义

目录 1.git版本控制器 2.git gitee&&github 3.Linux中gitee的使用 &#xff08; 三板斧 git add git commit -m " " git push &#xff09; 4.git log 查看之前的修改信息 &#xff08;所有提交日志&#xff09; 5.git status 查看工作目录与本地…

透传 vs 非透传|数据传输效率与安全性的权衡及应用指南

官方原文&#xff1a;一分钟搞懂透传和非透传的区别-成都纵横指控 在当今数字化时代,数据传输已经成为各行各业的关键环节。在数据通信和物联网应用中,"透传"和"非透传"是两个常见且重要的概念。了解它们的区别,对于选择合适的通信方式至关重要。 什么是…