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

SQL练习(6/81)

目录

1.寻找连续值

方法一:使用自连接(Self-Join)

方法二:使用窗口函数(Window Functions)

2.寻找有重复的值

 GROUP BY子句

HAVING子句

常用聚合函数:

3.找不存在某属性的值

not in

not exist

性能比较

使用场景


1.寻找连续值

方法一:使用自连接(Self-Join)

select distinct l1.num as ConsecutiveNums
from logs l1
join logs l2 on l1.id = l2.id - 1 and l1.num = l2.num
join logs l3 on l2.id = l3.id - 1 and l2.num = l3.num
  1. 自连接(Self-Join)

    • 自连接是指将同一张表连接到自身。通过为同一张表赋予不同的别名(如l1l2l3),可以将表中的行与其他行进行比较。

    • 在这个例子中,l1l2l3分别代表logs表中的不同行,通过id的偏移量来确定它们之间的顺序关系。

  2. 连接条件(Join Conditions)

    • l1.id = l2.id - 1:表示l2idl1id大1,即l2l1的下一行。

    • l1.num = l2.num:表示l1l2num值相同。

    • l2.id = l3.id - 1:表示l3idl2id大1,即l3l2的下一行。

    • l2.num = l3.num:表示l2l3num值相同。

    • 通过这些条件,确保了l1l2l3是连续的三行,并且它们的num值相同。

  3. DISTINCT关键字

    • DISTINCT用于去除结果中的重复行,确保输出的ConsecutiveNums是唯一的。

方法二:使用窗口函数(Window Functions)

select distinct num as ConsecutiveNums
from (select num,LAG(num,1) over(order by id ASC) as pre1,LAG(num,2) over(order by id ASC) as pre2,LEAD(num,1) over(order by id ASC) as post1,LEAD(num,2) over(order by id ASC) as post2from logs
) AS subquery
where (pre2 = pre1 and pre1 = num)or (pre1 = num and num = post1)or (num = post1 and post1 = post2)
  1. 窗口函数(Window Functions)

    • 窗口函数允许在结果集中对每一行进行计算,同时考虑其他行的值。LAGLEAD是两种常用的窗口函数。

    • LAG(num,1) over(order by id ASC) as pre1:获取当前行的前一行的num值。

    • LAG(num,2) over(order by id ASC) as pre2:获取当前行的前两行的num值。

    • LEAD(num,1) over(order by id ASC) as post1:获取当前行的下一行的num值。

    • LEAD(num,2) over(order by id ASC) as post2:获取当前行的下两行的num值。

  2. 子查询(Subquery)

    • 子查询用于生成一个临时表(subquery),其中包含了原始表中的num值以及通过窗口函数计算出的前后行的num值。

  3. WHERE子句

    • WHERE子句用于筛选出满足连续三次相同数字的行:

      • (pre2 = pre1 and pre1 = num):当前行的num值与其前两行的num值相同。

      • (pre1 = num and num = post1):当前行的num值与其前一行和下一行的num值相同。

      • (num = post1 and post1 = post2):当前行的num值与其下一行和下两行的num值相同。

  4. DISTINCT关键字

    • DISTINCT用于去除结果中的重复行,确保输出的ConsecutiveNums是唯一的。

180. 连续出现的数字 - 力扣(LeetCode)



2.寻找有重复的值

SELECT DISTINCT email AS Email
FROM Person
GROUP BY email
HAVING COUNT(email) > 1;
 GROUP BY子句
  • GROUP BY email

    • GROUP BY用于将结果集按一个或多个列分组。这里按email列分组,将具有相同email值的行归为一组。

    • 分组后,每个email值只会出现一次,便于后续的聚合操作。

HAVING子句
  • HAVING COUNT(email) > 1

    • HAVING用于对分组后的结果进行筛选,类似于WHERE子句,但HAVING用于筛选分组后的聚合结果。

    • COUNT(email):计算每个分组中的行数,即每个email值出现的次数。

    • HAVING COUNT(email) > 1:筛选出出现次数大于1的email值,即找出重复的email

常用聚合函数:
  1. COUNT:计算某个列中非NULL值的数量,或使用COUNT(*)计算表中的总行数。

  2. SUM:计算数值列的总和,仅适用于数值类型的列。

  3. AVG:计算数值列的平均值,仅适用于数值类型的列。

  4. MAX:找出某个列中的最大值,适用于数值列或字符串列。

  5. MIN:找出某个列中的最小值,适用于数值列或字符串列。

  6. COUNT(DISTINCT):计算某个列中唯一值的数量,通过DISTINCT去除重复值后计数。

  7. SUM(DISTINCT):计算某个列中唯一值的总和,通过DISTINCT去除重复值后求和。

  8. AVG(DISTINCT):计算某个列中唯一值的平均值,通过DISTINCT去除重复值后求平均。

  9. GROUP_CONCAT:将同一组中的值连接成一个字符串,可通过SEPARATOR指定分隔符。

  10. STDDEV:计算数值列的标准差,用于衡量数据的离散程度。

  11. VAR:计算数值列的方差,用于衡量数据的离散程度。

  12. BIT_AND:计算一组值的按位与,用于位运算。

  13. BIT_OR:计算一组值的按位或,用于位运算。

  14. BIT_XOR:计算一组值的按位异或,用于位运算。

3.找不存在某属性的值

not in

select name as Customers
from Customers
where Customers.id not in (select customerId from Orders
)
  • 定义

    • NOT IN 用于检查某个值是否不在一个子查询或值列表中。

  • 语法

    SELECT column_name
    FROM table_name
    WHERE column_name NOT IN (subquery | value_list);
  • 特点

    • 子查询NOT IN 后面可以跟一个子查询,返回一个值列表。

    • 值列表:也可以直接跟一个具体的值列表。

    • 性能:在某些情况下,NOT IN 的性能可能不如 NOT EXISTS,尤其是在子查询返回大量数据时。

    • 空值处理:如果子查询返回的列表中包含 NULLNOT IN 会返回空结果集,因为 NULL 与任何值的比较结果都是 UNKNOWN

not exist

SELECT name AS Customers
FROM Customers c
WHERE NOT EXISTS (SELECT 1FROM Orders oWHERE o.customerId = c.id
);
  • 定义

    • NOT EXISTS 用于检查某个子查询是否不返回任何行。

  • 语法

    SELECT column_name
    FROM table_name
    WHERE NOT EXISTS (subquery);
  • 特点

    • 子查询NOT EXISTS 后面必须跟一个子查询。

    • 性能:通常比 NOT IN 更高效,尤其是在处理大量数据时。NOT EXISTS 会在找到第一个匹配的行时停止进一步检查,而 NOT IN 会检查整个子查询结果。

    • 空值处理NOT EXISTS 不受 NULL 值的影响,因为它只关心子查询是否返回行,而不是具体的值。

性能比较

  • NOT IN

    • 适用于子查询返回的值列表较小的情况。

    • 如果子查询返回大量数据,性能可能会下降。

    • NULL 值敏感,可能导致意外结果。

  • NOT EXISTS

    • 通常更高效,尤其是在处理大量数据时。

    • 不受 NULL 值的影响。

    • 逻辑上更清晰,尤其是在涉及多表连接时。

使用场景

  • NOT IN

    • 适用于简单的值列表检查。

    • 适用于子查询返回的值列表较小的情况。

  • NOT EXISTS

    • 适用于复杂的子查询,尤其是涉及多表连接的情况。

    • 适用于需要高效处理大量数据的情况。

相关文章:

SQL练习(6/81)

目录 1.寻找连续值 方法一:使用自连接(Self-Join) 方法二:使用窗口函数(Window Functions) 2.寻找有重复的值 GROUP BY子句 HAVING子句 常用聚合函数: 3.找不存在某属性的值 not in no…...

Android 中 打开文件选择器(ACTION_OPEN_DOCUMENT )

在 Android 中,打开文件选择器(File Picker)通常是指启动一个系统提供的界面,让用户可以选择存储在设备上的文件。可以通过发送一个带有 Intent.ACTION_OPEN_DOCUMENT 或 Intent.ACTION_GET_CONTENT 的 Intent 来实现。 1、启动文…...

AWS中国区CloudFront证书管理和应用指南

在AWS中国区使用CloudFront时,SSL/TLS证书的管理和应用是一个重要的环节。本文将详细介绍如何在AWS中国区上传、管理和应用SSL证书到CloudFront分配。 1. 准备证书文件 首先,我们需要准备好SSL证书相关的文件。通常,这包括: 私钥文件(.key)公钥证书文件(.crt)证书链文…...

Python之三大基本库——Matplotlib

好久没来总结了,今天刚好有时间,我们来继续总结一下python中的matplotlib 一、什么是Matplotlib ‌Matplotlib‌是一个Python的2D绘图库,主要用于将数据绘制成各种图表,如折线图、柱状图、散点图、直方图、饼图等。它以各种硬拷贝…...

随笔:hhhhh

第一题 ∫ − ∞ ∞ x e x − e x d x ∫ 0 ∞ ln ⁡ t ⋅ e ln ⁡ t − t ⋅ 1 t d t ∫ 0 ∞ ln ⁡ t ⋅ e − t ⋅ 1 t ⋅ t d t ∫ 0 ∞ ln ⁡ t ⋅ e − t d t ψ ( 1 ) − γ \begin{align*} \int_{-\infty}^{\infty}xe^{x-e^x}\text{d}x&\int_{0}^{\infty}…...

计算机网络-----6分层结构

目录 “分层” 的设计思想: 计算机网络要完成的功能: 计算机网络的分层结构: 网络体系结构的概念: 各层之间的关系: 数据的传输过程 水平视角: 垂直视角: 相关概念 协议三要素&#x…...

初识SOC:RK3588

目录 一、高性能计算与边缘计算 二、多媒体处理与显示 三、图形与游戏开发 四、物联网与嵌入式系统 五、操作系统兼容性 RK3588作为瑞芯微推出的高性能处理器,凭借其多核架构、高算力NPU和多媒体处理能力,可广泛应用于以下领域: 一、高…...

卡顿检测与 Choreographer 原理

一、卡顿检测的原理 卡顿的本质是主线程(UI 线程)未能及时完成某帧的渲染任务(超过 16.6ms,以 60Hz 屏幕为例),导致丢帧(Frame Drop)。检测卡顿的核心思路是监控主线程任务的执行时…...

第十天——贪心算法——深度总结

文章目录 贪心算法深度解析:原理与应用 1. 贪心算法的基本原理 1.1 贪心选择性质 1.2 最优子结构 1.3 贪心算法与动态规划的对比 2. 贪心算法的应用场景 3. 具体应用案例 3.1 分配饼干 (Assign Cookies) 3.2 分糖果 (Candy Distribution) 3.3 种花问题 (C…...

python自学笔记2 数据类型

字符串操作 f字符串: for index, char in enumerate(greeting_str):print(f"字符:{char}, 索引:{index}")f字符串可以方便的在字符串中插入变量 字符串切片 指定步长: print(greeting_str[::2])指定步长为2的取字符…...

nacos配置文件快速部署另一种方法

提交nacos配置的另一种一种方法,批命令/shell: 以下脚本直接把当前目录下的所有yaml文件一键提交到nacos上 前提是要先安装curl 以及 jq 然后 把下面的shell保存为 import-all.sh 然后 chmod x import-all.sh && ./import-all.sh 就好了. 记得修改一下的NAMESPACE_…...

RTK哪个品牌好?2025年RTK主流品牌深度解析

在测绘领域,RTK 技术的发展日新月异,选择一款性能卓越、稳定可靠的 RTK 设备至关重要。2025 年,市场上涌现出众多优秀品牌,本文将深入解析几大主流品牌的核心竞争力。 华测导航(CHCNAV):技术创…...

游戏引擎学习第285天:“Traversables 的事务性占用”

回顾并为当天的工作做准备 我们有一个关于玩家移动的概念,玩家可以在点之间移动,而且当这些点移动时,玩家会随之移动。现在这个部分基本上已经在工作了。我们本来想实现的一个功能是:当玩家移动到某个点时,这个点能“…...

HNUST湖南科技大学-安卓Android期中复习

使用说明:除了选择判断就看习题外,推荐重点复习三四章多复习案例,这里应该是编程空题,把界面控件、活动单元熟悉一下。第五章(数据存储方式,尤其是文件存储)、第六章(重点内容提供者…...

一种应用非常广泛的开源RTOS(实时操作系统):nuttx

什么是NuttX? NuttX(读音接近“纳特-艾克斯”)是一种应用非常广泛的开源RTOS(实时操作系统),由Gregory Nutt博士主要推动开发。RTOS,即 Real-Time Operating System,直译为“实时操…...

WebSocket 客户端 DLL 模块设计说明(基于 WebSocket++ + Boost.Asio)

WebSocket 客户端 DLL 模块设计说明(基于 WebSocket Boost.Asio) 📌 目录 一、模块总览二、导出接口说明(EXPORTS)三、状态变量功能解读四、连接启动流程详解五、事件回调说明六、消息发送流程七、心跳与断连 JSON …...

微信小程序:封装request请求、解决请求路径问题

一、创建文件 1、创建请求文件 创建工具类文件request.js,目的是用于发送请求 二、js接口封装 1、写入接口路径 创建一个变量BASE_URL专门存储api请求地址 2、获取全局的token变量 从缓存中取出token的数据 3、执行请求 (1)方法中接收传递的参数 function request(url,…...

Ubuntu24.04 安装 5080显卡驱动以及cuda

前言 之前使用Ubuntu22.04版本一直报错,然后换了24.04版本才能正常安装 一. 配置基础环境 Linux系统进行环境开发环境配置-CSDN博客 二. 安装显卡驱动 1.安装驱动 按以下步骤来: sudo apt update && sudo apt upgrade -y#下载最新内核并安装 sudo add…...

Jenkins的流水线执行shell脚本执行jar命令后项目未启动未输出日志问题处理

现象 在流水线里配置了启动脚本例如,nohup java -jar xxx.jar >nohup.out 2>&1 & 但是在服务器发现服务并未启动,且nohup日志里没输出日志,这样的原因是jenkins在执行完脚本后,就退出了这个进程。 解决 在启动脚本执行jar命令的上一步…...

Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优

Core Web Vitals 全链路优化:从浏览器引擎到网络协议深度调优 一、浏览器渲染引擎级优化 1.1 合成器线程优化策略 • 分层加速:通过will-change属性创建独立的合成层 .accelerated {will-change: transform;backface-visibility: hidden; }• 光栅化策略调整:使用image-r…...

【网络编程】十、详解 UDP 协议

文章目录 Ⅰ. 传输层概述1、进程之间的通信2、再谈端口号端口号的引出五元组标识一个通信端口号范围划分常见的知名端口号查看知名端口号协议号 VS 端口号 3、两个问题一个端口号是否可以被多个进程绑定?一个进程是否可以绑定多个端口号? 4、部分常见指令…...

求职困境:开发、AI、运维、自动化

文章目录 问:我的技术栈是web全栈(js,css,html,react,typscript),C开发,python开发,音视频图像开发,神经网络深度学习开发,运维&#…...

如何将数据从一部手机传输到另一部手机 | 5 种便捷传输方式

更换新手机可能是一种令人兴奋的体验,但您仍然需要解决问题 - 如何将数据从一部手机传输到另一部手机。幸运的是,有多种方法可以简化此过程,从一键式解决方案到基于云的传输。本文探讨了五种流行的技术来帮助您无缝迁移数据。 第 1 部分&…...

GEE计算 RSEI(遥感生态指数)

🛰️ 什么是 RSEI?为什么要用它评估生态环境? RSEI(遥感生态指数,Remote Sensing Ecological Index) 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。 它的设计初衷是用最少的变量&…...

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标

k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标 文章目录 k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标一、Metrics Server简介二、kube-state-metrics实战部署1. 创…...

JavaScript:PC端特效--元素可视区client系列

一、client系列 client翻译过来就是客户端,我们使用client系列的相关属性来获取元素可视区的相关信息。通过client系列的相关属性可以动态的得到该元素的边框大小、元素大小等。 client系列属性作用element.clientTop返回元素上边框的大小element.clientLeft返回元…...

Centos7 中 Docker运行配置Apache

1、拉去httpd镜像(不加版本号,默认拉最新版本) docker pull httpd 2、运行httpd docker run -di --name httpd-test -p 8080:80 httpd 3、创建文件夹后边做映射 mkdir -p /Docker/apache/www /Docker/apache/logs /Docker/apache/conf 4、…...

PostgreSQL中的全页写

一、概述 在PGSQL数据库中,默认的页面大小为8KB,但是磁盘buffer的大小为4KB,扇区大小为512B。这就导致在操作系统的角度看数据库的写操作,其实并不是一种原子操作。如果操作系统发生了系统级别的故障,此时正好操作系统…...

对称二叉树的判定:双端队列的精妙应用

一、题目解析 题目描述 给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的: 1/ \2 2/ \ / \ 3 4 4 3而 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3问题本质 判断一棵二叉…...

Redis + ABP vNext 构建分布式高可用缓存架构

🚀 Redis ABP vNext 构建分布式高可用缓存架构 🔧 环境准备 开发环境 .NET 8.0 SDKVisual Studio 2022 / VS CodeDocker & Docker Compose NuGet 包 Volo.Abp.Caching.StackExchangeRedis v8.1.5Volo.Abp.DistributedLocking.StackExchangeRedis v…...

jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始

jvm是虚拟机的通称。 java实际默认的应用是hotspot(基于栈的指令集架构) 注:注意区分寄存器的指令集和栈指令集的架构。(大概理解java移植性好就是因为是栈指令集) jvm虚拟机,具有跨语言功能&#xff0…...

MySQL——3、数据类型

数据类型 1、数据类型分类2、数值类型2.1、tinyint类型2.2、bit类型2.3、小数类型2.3.1、float2.3.2、decimal 3、字符串类型3.1、char3.2、varchar3.3、char和varchar比较3.4、日期和时间类型3.5、enum和set 1、数据类型分类 2、数值类型 2.1、tinyint类型 首先创建t1表&…...

Flutter - 集成三方库:日志(logger)

日志 使用print方法时,会提示 添加依赖 $ flutter pub add logger下载依赖 $ flutter pub get使用 打印 import package:logger/logger.dart;var logger Logger(); logger.d("debug"); logger.e("error"); logger.i("info"); logger.f(&qu…...

第五部分:第五节 - Express 路由与中间件进阶:厨房的分工与异常处理

随着你的 Express 应用变得越来越大,所有的路由和中间件都写在一个文件里会变得难以管理。这时候就需要将代码进行拆分和组织。此外,一个健壮的后端应用必须能够优雅地处理错误和一些常见的 Web 开发问题,比如跨域。 路由模块化 (express.Ro…...

国标GB/T 12536-90滑行试验全解析:纯电动轻卡行驶阻力模型参数精准标定

摘要 本文以国标GB/T 12536-90为核心框架,深度解析纯电动轻卡滑行试验的完整流程与数据建模方法,提供: 法规级试验规范:从环境要求到数据采集全流程详解行驶阻力模型精准标定:最小二乘法求解 ( FAv^2BvC ) 的MATLAB实…...

组件导航 (Navigation)+flutter项目搭建-混合开发+分栏

组件导航 (Navigation)flutter项目搭建 接上一章flutter项目的环境变量配置并运行flutter 上一章面熟了搭建flutter并用编辑器运行了ohos项目,这章主要是对项目的工程化改造 先创建flutter项目,再配置Navigation 1.在开发视图的resources/base/profi…...

物联网中的WiFi模式解析:AP、STA与混合模式

物联网现在还是比较火的,各种设备都要联网,那么WiFi已成为设备联网的“标配”。但你是否想过,为什么有的设备能自己创建WiFi热点,有的只能连接路由器?为什么有些网关既能收数据又能传数据? 主要还是因为Wi…...

spring cloud gateway 源码解析

参考:Spring Cloud Gateway SpringCloud gateway源码走读(顺带聊聊响应式) - 掘金 1,原理图 还是从starter 开始看 要实现网关的核心概念, 肯定是需要接受请求的server ,从上面的截图看 starter-gateway 只负责了包的依赖,并没有定义自动配置 , 他依赖了starter-webf…...

游戏引擎学习第286天:开始解耦实体行为

回顾并为今天的内容定下基调 我们目前正在进入实体系统的一个新阶段,之前我们已经让实体的移动系统变得更加灵活,现在我们想把这个思路继续延伸到实体系统的更深层次。今天的重点,是重新审视我们处理实体类型(entity type&#x…...

【论文阅读】KIMI K1.5: SCALING REINFORCEMENT LEARNING WITH LLMS

KIMI K1.5: SCALING REINFORCEMENT LEARNING WITH LLMS Scaling的解释: 通过系统性的方法扩展强化学习算法的能力,使其能够处理更复杂的问题、更大的状态/动作空间、更长的训练周期或更高效的资源利用 原文摘要: 研究背景与问题定位 传统预训…...

大语言模型与多模态模型比较

一、核心差异:输入数据类型与模态融合 输入数据类型 LLM:仅处理文本数据,例如文本分类、机器翻译、问答等任务,通过大规模语料库学习语言规律。 LMM:支持文本、图像、音频、视频等多种模态输入,例如根据图…...

vscode debug node + 前端

方法 2:调试全栈(Node 前端) 如果需同时调试后端和前端: 分别启动两个调试会话 一个配置调试 Node.js 后端(server.js)。 另一个配置调试浏览器前端(如上)。 {// Use IntelliS…...

RK3568-鸿蒙5.1与原生固件-扇区对比分析

编译生成的固件目录地址 ../openharmony/out/rk3568/packages/phone/images鸿蒙OS RK3568固件分析 通过查看提供的信息,分析RK3568开发板固件的各个组件及其用途: 主要固件组件 根据终端输出的文件列表,RK3568固件包含以下关键组件&#x…...

Java线程池(Thread Pool)性能优化解析

在高性能、高并发的Java应用开发中,线程池(Thread Pool)是不可或缺的组件。它通过复用线程,避免了线程频繁创建和销毁带来的资源开销,提高了系统的响应速度和稳定性。然而,不合理的线程池配置和使用方式也可能成为系统性能瓶颈的根源。 本文旨在深入解析Java线程池的性能…...

AI重塑未来学者:研究生教育的“进化论”与“数字化生存指南

目录: 一、引言:AI浪潮下的“象牙塔”新挑战与新机遇 二、AI的“双刃剑”:深度剖析对研究生教育的颠覆性影响 1. 研究范式的革新:从“人工”到“智能” 2. 知识获取与传授方式的重塑 3. 创新能力与批判性思维的再定义 4. 伦理困境与学术诚信的新考验 三、他山之石:发达国家…...

IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别

IHttpHandler和Tcp Listener的web服务器接收上传文件有什么区别 IHttpHandler 与 TCP Listener 处理文件上传的核心区别 IHttpHandler 和 TcpListener 是ASP.NET中处理 HTTP 请求的两种不同抽象层级,它们在文件上传处理上存在以下关键区别: 1. 抽象层…...

C++ --- new与delete

new与delete 一、回顾1.malloc2.calloc3.realloc4.free 二、new与delete的特殊之处(1)(2) 三、new与delete的底层原理四、总结 一、回顾 在C语言阶段我们学习了动态内存管理:malloc,calloc,realloc,free。 1.malloc …...

Guided Filtering相关记录

一、背景介绍 以前折腾保边滤波时候,刷了一些Guided Filtering相关资料。这里主要是对它们做个算法效果复现和资料简单整理。 二、Guided Filtering 1、基本原理 原版Guided Filtering的提出,主要是为了改善双边滤波做保边平滑滤波器时候的梯度翻转伪影…...

Rust 学习笔记:关于 String 的练习题

Rust 学习笔记:关于 String 的练习题 Rust 学习笔记:关于 String 的练习题选出描述正确的那一个。该程序最多可能发生多少次堆的内存分配?哪种说法最能解释为什么 Rust 不允许字符串索引?哪种说法最能描述字符串切片 &str 和字…...

AG-UI 协议:重构多模态交互,开启智能应用新纪元

一、协议诞生的时代背景:填补 AI 生态最后一块拼图 在人工智能技术飞速发展的今天,AI 代理(Agent)作为能够主动执行复杂任务的智能实体,正从实验室走向生产环境,重塑各个行业的工作流程。然而,…...