大数据SQL格式化规范及示例

news2024/10/6 18:30:21

无论是数据仓库开发还是数据分析,编写清晰易读的SQL是一项基本的技能。本文将分享几个SQL格式的规范和示例,旨在提高SQL的可读性和可维护性。

虽然这些规范没有严格的标准,但统一的格式可以帮助减少理解和维护SQL代码的时间。不管团队其他人怎样,自己写的要有规范!

image.png

目录

    • 大小写保持一致
      • 示例:
    • 使用缩进
      • 示例1:
      • 示例2:
      • 示例3:
    • 在GROUP BY和ORDER BY之后使用字段的排列序号
      • 示例:
    • 使用Common Table表达式(CTE)
      • 示例:
    • 使用具有描述性的别名
      • 示例:
    • 总结

大小写保持一致

SQL关键字的大小写可以自由选择,但应保持一致。例如:

SELECT customer_city, COUNT(*)
FROM dim_customer
WHERE customer_province = '上海'
GROUP BY customer_city;

示例:

不规范的SQL语句:

SELECT customer_city,count(*) from dim_customer WHERE customerProvince = '上海' Group by customer_city;

规范后的SQL语句:

SELECT customer_city, COUNT(*)
FROM dim_customer
WHERE customer_province = '上海'
GROUP BY customer_city;

注意点:

  • SQL关键字的大小写保持一致。
  • 字段命名风格保持一致,避免混用下划线和驼峰命名法。

使用缩进

合理的缩进能使SQL语句结构更加清晰。以下是两种常见的缩进方式:

示例1:

SELECT dp.region_name, COUNT(*)
FROM user_behavior_log ubl
JOIN dim_province dp ON ubl.province = dp.province_name
WHERE ubl.province = '上海市'
GROUP BY dp.region_name;

示例2:

SELECT
    dp.region_name,
    COUNT(*)
FROM user_behavior_log ubl
JOIN dim_province dp ON ubl.province = dp.province_name
WHERE ubl.province = '上海市'
GROUP BY
    dp.region_name;

示例3:

SELECT
    dp.region_name,
    COUNT(*)
FROM user_behavior_log ubl
JOIN dim_province dp ON ubl.province = dp.province_name
WHERE ubl.province = '上海市'
GROUP BY
    dp.region_name;

建议使用4个字符或2个字符缩进,根据团队习惯选择。

在GROUP BY和ORDER BY之后使用字段的排列序号

这种方式可以简化代码,特别是对于包含多个字段的分组和排序:

示例:

SELECT
    dp.region_name,
    dp.province_name,
    COUNT(*)
FROM user_behavior_log ubl
JOIN dim_province dp ON ubl.province = dp.province_name
GROUP BY 1, 2
ORDER BY 3;

这样写有如下好处:

  • 节省行数:避免在GROUP BY和ORDER BY子句中重复列名。
  • 可维护性:更改分组字段时,只需修改SELECT子句。

使用Common Table表达式(CTE)

CTE可以简化复杂查询,将查询逻辑拆分为多个部分,使代码更具可读性和可维护性:

示例:

WITH employee_by_title_count AS (
    SELECT t.name AS job_title, COUNT(e.id) AS amount_of_employees
    FROM employees e
    JOIN job_titles t ON e.job_title_id = t.id
    GROUP BY 1
),
salaries_by_title AS (
    SELECT name AS job_title, salary
    FROM job_titles
)
SELECT *
FROM employee_by_title_count e
JOIN salaries_by_title s ON s.job_title = e.job_title;

使用具有描述性的别名

为查询列加上易于理解的别名,可以增加脚本的可维护性:

示例:

SELECT
    dp.region_name AS region,
    COUNT(*) AS user_count
FROM user_behavior_log ubl
JOIN dim_province dp ON ubl.province = dp.province_name
WHERE ubl.province = '上海市'
GROUP BY dp.region_name;

总结

文中提到的一些规范,有些是必须遵守的,有些是个人习惯。无论你是开发人员、数据分析师,还是数据仓库开发人员,遵循这些规范可以避免不必要的麻烦。

SQL格式没有标准的约定,需要与团队成员达成共识,一起按照相同的约定进行开发,提高SQL代码的可读性和可维护性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G智能运维趋势

随着5G技术的普及,网络运维面临着前所未有的复杂性和数据量挑战。智能运维通过人工智能、大数据分析、自动化工具等技术,为5G网络提供了高效的管理和优化手段。在网络性能优化、故障预测与管理、资源动态调度、安全管理和网络切片管理等方面,…

一些激活函数

一些激活函数 摘要激活函数分类sigmoidTanhSoftsignSoftmaxReLUSoftplusNoisy ReLULeaky ReLUPReluELUSELUSwishGELUGLUGEGLUMishMaxout 摘要 本篇博客对一些激活函数进行总结,以便加深理解和记忆 激活函数分类 饱和激活函数:sigmoid、tanh… 非饱和激…

欣九康诊疗系统助力诊所向数字化转型

数字化已经成为各行各业转型的重点方向,而为了不被时代所淘汰,医疗机构也势必要紧跟潮流,本人作为门诊部的负责人深知医疗机构要想实现数字化转型那么拥有一款便捷实用的医疗平台是必不可少的,近几年,随着国家大力支持…

table组件,前端如何使用table组件,打印数组数据,后端传输的数据应该如何打印

一、如何使用table,将数组数据打印出来 后端传来的数据,很大概率是一个List数组,我们必须用一个table组件,来打印这些数据。 table标签的介绍 在HTML中,table是常用组件之一,主要用来打印数组信息。 它的…

SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程

前言 Spring Boot 项目启动时会在控制台打印出一个 banner,下面演示如何定制这个 banner。 若依也会有相应的启动动画 _ooOoo_o8888888o88" . "88(| -_- |)O\ /O____/---\____. \\| |// ./ \\||| : |||// \/ _||||| -:- |||||- \| | \\…

基于DPU的云原生裸金属服务快速部署及存储解决方案

1. 背景介绍 1.1. 业务背景 在云原生技术迅速发展的当下,容器技术因其轻量级、可移植性和快速部署的特性而成为应用部署的主流选择,但裸金属服务器依然有其独特的价值和应用场景,是云原生架构中不可或缺的一部分。 裸金属服务器是一种高级…

Training language models to follow instructions with human feedback 论文阅读

论文原文:https://arxiv.org/pdf/2203.02155 论文简介 语言模型越大并不意味着它能更好的理解用户的意图,因此在这篇论文中,展示了根据人的反馈对模型进行微调,使得语言模型能够在各种人物上更好的理解用户的意图。在评估中&…

Linux系统之Ward服务器监控工具

Linux系统之Ward服务器监控工具 文章目录 Linux系统之Ward服务器监控工具介绍资源列表基础环境一、安装Java环境二、下载ward的jar包2.2、下载软件包 三、安装ward工具3.1、启动ward服务3.2、查看你后台启动任务3.3、监听ward服务端口 四、访问ward服务4.1、进入ward初始界面4.…

【可控图像生成系列论文(一)】MimicBrush 港大、阿里、蚂蚁集团合作论文解读

背景:考虑到用户的不同需求,图像编辑是一项实用而富有挑战性的任务,其中最困难的部分之一是准确描述编辑后的图像应该是什么样子。 创新点:在本文作者提出了一种新的编辑形式,称为模仿编辑,以帮助用户更方…

深入理解 Java 中的 volatile 关键字

暮色四合,晚风轻拂,湖面上泛起点点波光,宛如撒下了一片星河。 文章目录 前言一、CPU 三级缓存二、JMM三、并发编程正确性的基础四、volatile 关键字五、volatile 可见性六、volatile 有序性6.1 指令重排序6.2 volatile 禁止指令重排6.3 vola…

虚拟机使用桥接模式网络配置

1、获取本机的网络详细信息 windowr 输入cmd 使用ipconfig -all 一样即可 在自己的虚拟机中设置网络 虚拟机中的ip ---------192.168.36.*,不要跟自己的本机ip冲突 网关-----------192.168.36.254 一样即可 dns -----------一样即可,我多写了几个&am…

数字孪生智慧机场:引领航空未来

图扑数字孪生技术赋能智慧机场,实现运营管理和乘客服务的全面优化。实时数据监控与智能决策助力高效安全的航空体验,推动行业创新与发展。

网络安全:SQL注入防范

文章目录 网络安全:SQL注入防范引言防范措施概览使用参数化查询示例代码 输入验证和过滤示例代码 使用ORM框架示例代码 其他防范措施结语 网络安全:SQL注入防范 引言 在上一篇文章中,我们介绍了SQL注入攻击的基础知识。本文将重点讨论如何防…

【UML用户指南】-16-对高级结构建模-构件

目录 1、概念 2、构件与接口 3、可替换性 4、组织构件 5、端口 6、内部结构 6.1、部件 6.2、连接件 7、常用建模技术 7.1、对结构类建模 7.2、对API建模 构件是系统中逻辑的并且可替换的部分,它遵循并提供对一组接口的实现。好的构件用定义良好的接口来定…

来自工业界的知识库 RAG 服务(四),FinGLM 竞赛冠军项目详解

背景介绍 在 前一篇文章 中介绍过智谱组织的一个金融大模型 RAG 比赛 FinGLM 以及 ChatGLM反卷总局 团队的项目,这篇文章继续介绍下获得冠军的馒头科技的技术方案。 建议不了解比赛背景信息的可以先查看 来自工业界的知识库 RAG 服务(三),FinGLM 竞赛获…

[YOLOv10涨点改进:注意力魔改 | 轻量级的 Mixed Local Channel Attention (MLCA),加强通道信息和空间信息提取能力]

本文属于原创独家改进:一种轻量级的Mixed Local Channel Attention (MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果 1.YOLOv10介绍 论文:[https://arxiv.org/pdf/2405.14458] 代码: https://gitcode.com/THU-MIG/yolov10?utm_s…

基于R-Tree的地理空间数据分析加速

几年前,我正在做一个业余项目。我想创建一个 Web 应用程序,推荐当地的特色景点,例如咖啡馆、书店或隐藏的酒吧。我的想法是在地图上显示用户触手可及的所有兴趣点。我的数据集中有数十万个点,我必须巧妙地过滤用户给定范围内的数据…

DVWA - Brute Force

DVWA - Brute Force 等级:low ​ 直接上bp弱口令爆破,设置变量,攻击类型最后一个,payload为用户名、密码简单列表 ​ 直接run,长度排序下,不一样的就是正确的用户名和密码 ​ 另解: 看一下…

3DMAX网格插入插件使用方法讲解

3DMAX网格插入插件使用方法 3DMAX网格插入插件,在选择的面上安门窗、打螺丝、挖洞、插入眼耳口鼻及其它网格模型等可以分分钟搞定!它通过将面选择替换为库中的资源来加快建模过程。非常适合硬网格和有机建模! 【适用版本】 3dMax2013及更高版…

快速欧氏聚类与普通欧氏聚类比较

1、前言 文献《FEC: Fast Euclidean Clustering for Point Cloud Segmentation》介绍了一种快速欧氏聚类方法,大概原理可以参考如下图,具体原理可以参考参考文献。 2、时间效率比较:快速欧氏聚类VS普通欧氏聚类 网上搜集的快速欧式聚类,与自己手写的普通欧式聚类进行对比,…