【SQL语句】SQL编写规范
简介
本文编写原因主要来于XC迁移过程中修改SQL语句时,发现大部分修改均源自于项目SQL编写不规范,以此文档做以总结。
- 注:此文档覆盖不甚全面,大体只围绕迁移遇到的修改而展开。
正文
1、【字段引号】
列名、表名如无特殊情况,不要添加任何引号(` ’ 等)。若返回列名有可能是关键字,例如month、year等,必须使用双引号包裹。
# 错误
SELECT book_name as bookMame, year as year;
# 正确
SELECT book_name as bookMame, year as "year";
2、【除0兼容】
存在除法计算的时候(/),要确保除数为0的兼容。MYSQL一定程度上兼容这种计算,但是对于其他数据库则不一定,最好的办法是使用函数nullif对被除数进行零值判断。
# 错误
SELECT a/b
# 正确
select a/nullif(b, 0)函数解释:
NULLIF(表达式1,表达式2)
NULLIF函数比较表达式1和表达式2。如果两个表达式相等就返回空值(NULL)。如果不等就返回表达式1。
3、【严格分组】
在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、AVG 等)、常量。但通常可以通过设置数据库的sql_mode,移除only_full_group_by解决此问题,但是若无特殊情况,还是应保障遵守严格模式标准。若能保证某个字段在业务中每个分组中只会有一个值,并且也不想用作group by字段语句,可通过max(特殊字段)方式达到类似的效果。
# 不规范写法
SELECT a, b
from tb
group by a;# 兼容写法
SELECT a, max(b)
from tb
group by a;# 规范写法,既然b没有参与分组,就不该出现在select子句中
SELECT a
from tb
group by a;
4、【类型区别】
日期不要和字符串类型进行比较
update safety_manage_organ
set spread_certificate_status = if(spread_end_time is null || spread_end_time >= now(), '有效', '无效'),
chief_engineer_certificate_status = if(chief_engineer_end_time is null || chief_engineer_end_time >= now(), '有效', '无效'), deputy_safe_certificate_status = if(deputy_safe_end_time is null || deputy_safe_end_time >= now(), '有效', '无效'), electric_certificate_status = if(electric_end_time is null || electric_end_time >= now(), '有效', '无效'),
produce_certificate_status = if(produce_end_time is null || produce_end_time >= now(), '有效', '无效')
WHERE enterprise_id = 260;update safety_manage_organ
set spread_certificate_status = if(spread_end_time is null || spread_end_time >= date_format(now(), '%Y-%m-%d'), '有效', '无效')
WHERE enterprise_id = 260;
5、【union规范】
union 连接的所有数据行要保证列顺序一致且字段类型相同。
# 错误写法
select 0 entId, 0 province, 0 city, 0 district from dual
union select '10164564' entId, '520000' province, '522000' city, '522022' district from dual# 正确写法
select '0' entId, '0' province, '0' city, '0' district from dual
union select '10164564' entId, '520000' province, '522000' city, '522022' district from dual
6、【多表关联】
多表关联时,最好为每张表指定别名,第一复杂查询时方便定位,第二某些数据库会报字段不明确的错误情况。
# 错误写法: 字段关联 "industry_type" 是不明确的
SELECT A.industry_type AS industry_type,SUM ( A.predict_count ) AS predict_count,( SUM ( A.predict_count ) - SUM ( b.real_count ) ) AS predict_change_value,(ROUND(( ( SUM ( A.predict_count ) - SUM ( b.real_count ) ) / SUM ( b.real_count ) ) * 100,2 ) ) AS predict_change_rate,SUM ( error_count ) AS error_count
FROM( SELECT SUM ( predict_count ) AS predict_count, error_count, industry_type FROM electricity_produce_predict_info WHERE YEAR = '2022' GROUP BY industry_type )AS A JOIN ( SELECT real_count, industry_type FROM electricity_produce_predict_info WHERE YEAR = '2022' - 1 GROUP BY industry_type ) AS b ON A.industry_type = b.industry_type
GROUP BY industry_type;# 正确写法,group by 跟上A.industry_type
SELECT A.industry_type AS industry_type,SUM ( A.predict_count ) AS predict_count,( SUM ( A.predict_count ) - SUM ( b.real_count ) ) AS predict_change_value,(ROUND(( ( SUM ( A.predict_count ) - SUM ( b.real_count ) ) / SUM ( b.real_count ) ) * 100,2 ) ) AS predict_change_rate,SUM ( error_count ) AS error_count
FROM( SELECT SUM ( predict_count ) AS predict_count, error_count, industry_type FROM electricity_produce_predict_info WHERE YEAR = '2022' GROUP BY industry_type )AS A JOIN ( SELECT real_count, industry_type FROM electricity_produce_predict_info WHERE YEAR = '2022' - 1 GROUP BY industry_type ) AS b ON A.industry_type = b.industry_type
GROUP BY A.industry_type;
结语
本文暂时列举此几大类,其主要应用于PG数据库,但也可代表所有,因为PG几乎是所有数据库中要求比较严格的一种。
相关文章:
【SQL语句】SQL编写规范
简介 本文编写原因主要来于XC迁移过程中修改SQL语句时,发现大部分修改均源自于项目SQL编写不规范,以此文档做以总结。 注:此文档覆盖不甚全面,大体只围绕迁移遇到的修改而展开。 正文 1、【字段引号】 列名、表名如无特殊情况…...
后端项目开发:工具类封装(序列化、反射)
1.整合Jackson 根据《阿里巴巴开发规范》,包名使用单数,类名可以使用复数。 所以generic-common创建util包和utils工具类 很多时候我们需要将接收到的json数据转换为对象,或者将对象转为json存储。这时候我们需要编写用于json转换的工具类。…...
软件测试技术分享丨遇到bug怎么分析?
为什么定位问题如此重要? 可以明确一个问题是不是真的“bug” 很多时候,我们找到了问题的原因,结果发现这根本不是bug。原因明确,误报就会降低 多个系统交互,可以明确指出是哪个系统的缺陷,防止“踢皮球…...
LeetCode无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…...
17.2.2 【Linux】通过systemctl观察系统上所有的服务
使用 systemctl list-unit-files 会将系统上所有的服务通通列出来~而不像 list-units 仅以 unit 分类作大致的说明。 至于 STATE 状态就是前两个小节谈到的开机是否会载入的那个状态项目。主要有 enabled / disabled / mask / static 等等。 假设我不想要知道这么多…...
Redis扩容机制与一致性哈希算法解析
在分布式系统设计中,Redis是一个备受欢迎的内存数据库,而一致性哈希算法则是分布式系统中常用的数据分片和负载均衡技术。本文将深入探讨Redis的扩容机制以及一致性哈希算法的原理,同时提供示例代码以帮助读者更好地理解这两个重要概念。 推…...
BDA初级分析——可视化基础
一、可视化的作用 数据可视化——利用各种图形方式更加直观地呈现数据的过程 可视化的作用 1、更快地理解数据,找出数据的规律和异常 2、讲出数据背后的故事,辅助做出业务决策 3、给非专业人士提供数据探索的能力 数据分析问题如何通过可视化呈现&am…...
边缘计算节点BEC典型实践:如何快速上手PC-Farm服务器?
百度智能云边缘计算节点BEC(Baidu Edge Computing)基于运营商边缘节点和网络构建,一站式提供靠近终端用户的弹性计算资源。边缘计算节点在海外覆盖五大洲,在国内覆盖全国七大区、三大运营商。BEC通过就近计算和处理,大…...
python自动把内容发表到wordpress完整示例及错误解答
要实现 Python 自动将内容发布到 WordPress,可以使用 Python 的 wordpress_xmlrpc 库,该库提供了使用 WordPress XML-RPC API 进行内容发布和管理的功能。 需要安装一下第三方库:wordpress_xmlrpc! pip install python_wordpress_xmlrpc 下面是一个简单的示例代码,可以实…...
【javaweb】学习日记Day6 - Mysql 数据库 DDL DML DQL
之前学习过的SQL语句笔记总结戳这里→【数据库原理与应用 - 第六章】T-SQL 在SQL Server的使用_Roye_ack的博客-CSDN博客 目录 一、概述 1、如何安装及配置路径Mysql? 2、SQL分类 二、DDL 数据定义 1、数据库操作 2、IDEA内置数据库使用 (1&…...
如何利用SFTP如何实现更安全的远程文件传输 ——【内网穿透】
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 文章目录 1. 安装openSSH1.1 安装SSH1.2 启动ssh 2. 安装cpolar2.1 配置termux服务 3. 远程SFTP连接配置3.1 查看生成的随机公…...
枚举和反射
枚举 枚举 枚举是一种特殊的类,它可以有自己的属性、方法和构造方法。 两种枚举的方法 自定义枚举 a.将构造器私有化,防止外部直接new b.去掉set方法,防止属性被修改 c.在内部直接创建固定的对象 通过类名直接去访问 关键字枚举 用…...
MinIO【部署 01】MinIO安装及SpringBoot集成简单测试
MinIO安装及SpringBoot集成测试 1.下载安装1.1 Install the MinIO Server1.2 Launch the MinIO Server1.3 Connect Your Browser to the MinIO Server 2.SpringBoot集成2.1 依赖及配置2.2 代码2.3 测试结果 1.下载安装 下载 https://min.io/download#/linux; 安装文…...
问道管理:证券代码是什么?有什么用?
交流炒股经历时,有些股民一时忘了股票发行公司的全称,会直接报一串数字来代替,这串数字的内容是证券代码,那么,证券代码是什么?它又起什么作用?关于这些,为大家准备了以下参考内容。…...
中文医学知识语言模型:BenTsao
介绍 BenTsao:[原名:华驼(HuaTuo)]: 基于中文医学知识的大语言模型指令微调 本项目开源了经过中文医学指令精调/指令微调(Instruction-tuning) 的大语言模型集,包括LLaMA、Alpaca-Chinese、Bloom、活字模型等。 我们基于医学知识图谱以及医…...
Java基础十四(字符串)
1. 判断邮箱 输入一个电子邮箱,判断是否是正确电子邮箱地址。 正确的邮箱地址: 必须包含 字符,不能是开头或结尾必须以 .com结尾和.com之间必须有其他字符 public class Mailbox {/*** 判断邮箱* param str* return boolean*/public stat…...
vue3 基础知识 (动态组件 keep-alive 等) 04
嘿,happy 文章目录 一、动态组件二、keep-alive 一、动态组件 动态组件是使用 component 组件,通过一个特殊的属性 is 来实现 一定是注册好的组件我们需要将属性和监听事件放到 component 上来使用 <template><div><button v-for"t…...
【C# Programming】编程入门:数组、操作符、控制流
目录 一、数组 1、数组的声明 1.1 一维数组声明: 1.2 多维数组声明: 2、数组的实例化和赋值 2.1 数组在声明时通过在花括号中使用以逗号分隔的数据项对数组赋值, 例如: 2.2 如果在声明后赋值,则需…...
线上问诊:业务数据采集
系列文章目录 线上问诊:业务数据采集 文章目录 系列文章目录前言一、环境准备1.Hadoop2.Zookeeper3.Kafka4.Flume5.Mysql6.Maxwell 二、业务数据采集1.数据模拟2.采集通道 总结 前言 暑假躺了两个月,也没咋写博客,准备在开学前再做个项目找…...
2023 CCPC 华为云计算挑战赛 hdu7399 博弈,启动!(图上博弈/枚举+逆向有向图sg函数)
题目 给定t(t<200)组样例, 每次给定一个n(n<300)个左边的点m(m<300)个右边的点的二分图,图无重边 所有边总量不超过5e5 初始时棋子可以被放置在任意一个点上, 若被放置在左边,则Alice先走;被放置在右边&a…...
Unity之 Vector3 的详细介绍以及方法的介绍
文章目录 总的介绍小试牛刀相关的描述的参数看个小例子 总的介绍 当涉及到Unity中的Vector3类时,以下是一些常用的方法和操作: magnitude 方法:返回向量的长度。 float length vector.magnitude;sqrMagnitude 方法:返回向量的平…...
Postgresql部署及简单操作
目录 1、介绍 2、什么是PostgreSQL 3、PostgreSQL 的特点 4、数据库定为 5、环境准备 6、编译安装 6.1 安装依赖包 6.2 下载安装包 6.3 创建用户 6.4 创建 postgresql数据目录并授权 6.5 上传压缩包并解压 6.6 编译postgresql源码 6.7 配置环境变量 6.8 初始化数…...
rabbitmq集群搭建
升级步骤 1.升级包上传 1.1上传erlang、rabbitmq安装包 创建对应升级目录 将安装包otp_src_22.1.7.tar.gz上传到新创建的目录下 将安装包rabbitmq-server-generic-unix-3.8.9.tar.xz上传到新创建的目录下 1.2 执行解压命令tar -zxvf otp_src_22.1.7.tar.gz xz -d rabbitmq-s…...
C++ 二叉搜索树的概念特性
1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树 ,或者是具有以下性质的二叉树 : 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大…...
7、Spring_AOP
一、Spring AOP 简介 1.概述 对于spring来说,有三大组件,IOC,ID,AOP aop概述:AOP(Aspect Oriented Programming)面向切面编程。 作用:不改变原有代码设计的基础上实现功能增强 例子 传统打印日志 使用…...
QChart:数据可视化(用图像形式显示数据内容)
1、数据可视化的图形有:柱状/线状/条形/面积/饼/点图、仪表盘、走势图,弦图、金字塔、预测曲线图、关系图、数学公式图、行政地图、GIS地图等。 2、在QT Creator的主页面,点击 欢迎》示例》右侧输入框 输入Chart,即可查看到QChar…...
【python】Leetcode(primer-set)
文章目录 78. 子集(集合的所有子集)90. 子集 II(集合的所有子集) 更多 leetcode 题解可参考:【Programming】 78. 子集(集合的所有子集) 给定一组不含重复元素的整数数组 nums,返回…...
【LVS集群】
目录 一、集群概述 1.负载均衡技术类型 2.负载均衡实现方式 二、LVS结构 1.三层结构 2.架构对象 三、LVS工作模式 四、LVS负载均衡算法 1.静态负载均衡 2.动态负载均衡 五、ipvsadm命令详解 1. -A 2. -D 3. -L 4. -a 5. -d 6. -l 7. -t 8. -s 9. -r 10. -…...
软考高级系统架构设计师系列之:论文题目类型、论文考试大纲、历年考试论文真题汇总、论文写作原则、论文写作常见问题、论文评分标准
软考高级系统架构设计师系列之:论文题目类型、论文考试大纲、历年考试论文真题汇总、论文写作原则、论文写作常见问题、论文评分标准 一、论文写作概述二、论文题目类型三、论文考试大纲1.系统建模2.软件架构设计3.系统设计4.分布式系统设计5.系统的可靠性分析与设计6.系统的安…...
完整的application.xml
<!-- 资源文件配置 --><beans profile"dev"><bean class"com.ningpai.util.CustomPropertyPlaceholderConfigurer"><property name"locations"><list><value>classpath:/com/ningpai/web/config/dev/jdbc.p…...
win7 网站建设/公司软文推广
西雅图IT圈:seattleit【今日作者】Dexter读书巨慢理事会会长开篇首先祝贺IT圈里亚麻的宝宝们——昨天,$AMNZ$冲上2000美元的历史新高,你们发财了可别忘了回来打赏啊!不过,树大招风刚刚达到股票新高的大亚麻,…...
洛阳网站推广公司电话/什么是软文
我们米扑科技的业务遍布全球,有时国外的客户无法访问我们搭建在国内的服务,这就要求我们在国外服务器上搭建一个代理转发服务,用户请求国外服务器的域名,然后代理转发到国内,处理请求后返回结果给国外的客户。Nginx 不…...
谁有手机网站啊介绍一下/2345网址导航删除办法
样式 1. 浏览器调样式 2. 在线生成 http://www.w2bc.com/manual/css3%20generator/text-rotation.html 3. 参照已有系统的类似样式 复制代码 js 1. console定位问题 var data [{品名: 名字1, 数量: 4}, {品名: 名字2, 数量: 3}];console.table(data);2. underscorea. 简介Unde…...
jsp做的网站答辩问题/最新的全国疫情
一、使用与特性 1.1、使用说明: 一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。而使用staticmethod或classmethod,就可以不需要实例化,直接通过类名就可以实现调用。 使用:直接类名.方法…...
网站创建网站/搜索引擎优化排名工具
点击上方“Java之间”,选择“置顶或者星标”你关注的就是我关心的!上一篇:MySQL性能优化之骨灰级,高阶神技QPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上对程序员来说都是必懂知识点。…...
网站建设研究背景/行业网站
首先进入官网下载,进入如下页面,选择适合自身版本的 Linux 的.deb 版本下载,也可以直接使用我们提供好的安装包。 下载完成之后,拷贝到 ubuntu 上,如下图所示: 然后使用以下命令进行安装: sudo …...