SQL进阶技巧:如何根据工业制程参数计算良品率?

目录

0 问题描述

1 数据准备

2 问题分析

步骤1:确定每个生产批次的制程参数是否在合格范围内

步骤2:基于中间结果一计算临时良品数量

步骤3:计算良品率(最终结果)

3 小结

问题拓展:如果制程参数是动态的,如何合理的设计表模型? 


0 问题描述

  • 制程参数是在产品生产过程中影响产品质量的各种因素,如温度、压力、时间、原材料成分等。要根据这些制程参数来计算良品率,需要考虑制程参数与产品是否合格之间的关系。通常,需要先确定每个制程参数的合格范围,然后统计在合格制程参数下生产出的良品数量与总生产数量的比率。

1 数据准备

  • 生产数据表(production_data)
    • 包含production_id(生产批次 ID)、product_id(产品 ID)、production_date(生产日期)、quantity_produced(生产数量)、quantity_defective(次品数量)、process_temperature(生产温度)、process_pressure(生产压力)等制程参数字段。
       CREATE TABLE production_data (production_id INT PRIMARY KEY,product_id INT,production_date DATE,quantity_produced INT,quantity_defective INT,process_temperature DECIMAL(5,2),process_pressure DECIMAL(5,2));INSERT INTO production_data VALUES(1, 1, '2024-01-01', 1000, 50, 100.00, 2.00),(2, 1, '2024-02-01', 1200, 80, 105.00, 2.20),(3, 2, '2024-01-15', 800, 40, 98.00, 1.80),(4, 2, '2024-02-15', 900, 60, 102.00, 2.10);
  • 制程参数标准表(process_standards)
    • 包含product_id(产品 ID)、parameter_name(参数名称,如 'temperature'、'pressure')、lower_limit(参数下限)、upper_limit(参数上限)。
       CREATE TABLE process_standards (product_id INT,parameter_name VARCHAR(20),lower_limit DECIMAL(5,2),upper_limit DECIMAL(5,2));INSERT INTO process_standards VALUES(1, 'temperature', 95.00, 105.00),(1, 'pressure', 1.80, 2.20),(2, 'temperature', 90.00, 102.00),(2, 'pressure', 1.60, 2.00);

2 问题分析

步骤1:确定每个生产批次的制程参数是否在合格范围内

  • 通过将生产数据表和制程参数标准表进行连接,使用CASE WHEN语句判断每个生产批次的制程参数是否在合格范围内。
     SELECT pd.production_id,pd.product_id,pd.production_date,pd.quantity_produced,pd.quantity_defective,-- 判断温度是否在合格范围内CASE WHEN ps_t.lower_limit <= pd.process_temperature AND pd.process_temperature <= ps_t.upper_limit THEN 1 ELSE 0 END AS temperature_in_range,-- 判断压力是否在合格范围内CASE WHEN ps_p.lower_limit <= pd.process_pressure AND pd.process_pressure <= ps_p.upper_limit THEN 1 ELSE 0 END AS pressure_in_rangeFROM production_data pd-- 连接温度标准表JOIN process_standards ps_t ON pd.product_id = ps_t.product_id AND ps_t.parameter_name = 'temperature'-- 连接压力标准表JOIN process_standards ps_p ON pd.product_id = ps_p.product_id AND ps_p.parameter_name = 'pressure';
production_idproduct_idproduction_datequantity_producedquantity_defectivetemperature_in_rangepressure_in_range
112024-01-0110005011
212024-02-0112008011
322024-01-158004011
422024-02-159006011

在这个结果集中,我们可以清晰看到每个生产批次对应的产品 ID、生产日期、生产数量、次品数量以及温度和压力这两个制程参数是否在各自的合格范围内(1表示在合格范围内,0表示不在合格范围内)。这一步的中间结果为后续计算良品率提供了基础数据,明确了哪些批次的哪些制程参数是符合标准的。

步骤2:基于中间结果一计算临时良品数量

  • 基于上一步的中间结果,进一步计算在考虑当前制程参数合格情况时,每个生产批次对应的临时良品数量(即如果制程参数都合格,该批次的良品数量;若有参数不合格,则临时良品数量计为 0)。
-- 步骤二:基于制程参数合格情况计算临时良品数量并输出中间结果
SELECT production_id,product_id,production_date,quantity_produced,quantity_defective,temperature_in_range,pressure_in_range,-- 计算临时良品数量(考虑制程参数合格情况)CASE WHEN temperature_in_range = 1 AND pressure_in_range = 1 THEN quantity_produced - quantity_defective ELSE 0 END AS temp_good_quantity
FROM (SELECT pd.production_id,pd.product_id,pd.production_date,pd.quantity_produced,pd.quantity_defective,-- 判断温度是否在合格范围内CASE WHEN ps_t.lower_limit <= pd.process_temperature AND pd.process_temperature <= ps_t.upper_limit THEN 1 ELSE 0 END AS temperature_in_range,-- 判断压力是否在合格范围内CASE WHEN ps_p.lower_limit <= pd.process_pressure AND pd.process_pressure <= ps_p.upper_limit THEN 1 ELSE 0 END AS pressure_in_rangeFROM production_data pd-- 关联温度标准数据JOIN process_standards ps_t ON pd.product_id = ps_t.product_id AND ps_t.parameter_name = 'temperature'-- 关联压力标准数据JOIN process_standards ps_p ON pd.product_id = ps_p.product_id AND ps_p.parameter_name = 'pressure'
) subquery;GROUP BY product_id, production_date;
production_idproduct_idproduction_datequantity_producedquantity_defectivetemperature_in_rangepressure_in_rangetemp_good_quantity
112024-01-0110005011950
212024-02-01120080111120
322024-01-158004011760
422024-02-159006011840

这里新增了temp_good_quantity字段,表示在考虑当前制程参数(温度和压力)合格与否的情况下,每个生产批次对应的临时良品数量。如果温度和压力都在合格范围内,该字段的值就是该批次实际的良品数量(生产数量减去次品数量);若有一个或多个制程参数不在合格范围内,则该字段值为 0。这个中间结果更接近最终计算良品率所需的数据形式,为下一步汇总计算良品率做准备。:

步骤3:计算良品率(最终结果)

-- 步骤三:计算良品率并输出最终结果
SELECT product_id,production_date,CONCAT(ROUND(((SUM(temp_good_quantity)) / SUM(quantity_produced)) * 100, 2), '%') AS yield_rate
FROM (SELECT production_id,product_id,production_date,quantity_produced,quantity_defective,temperature_in_range,pressure_in_range,-- 计算临时良品数量(考虑制程参数合格情况)CASE WHEN temperature_in_range = 1 AND pressure_in_range = 1 THEN quantity_produced - quantity_defective ELSE 0 END AS temp_good_quantityFROM (SELECT pd.production_id,pd.product_id,pd.production_date,pd.quantity_produced,pd.quantity_defective,-- 判断温度是否在合格范围内CASE WHEN ps_t.lower_limit <= pd.process_temperature AND pd.process_temperature <= ps_t.upper_limit THEN 1 ELSE 0 END AS temperature_in_range,-- 判断压力是否在合格范围内CASE WHEN ps_p.lower_limit <= pd.process_pressure AND pd.process_pressure <= ps_p.upper_limit THEN 1 ELSE 0 END AS pressure_in_rangeFROM production_data pd-- 关联温度标准数据JOIN process_standards ps_t ON pd.product_id = ps_t.product_id AND ps_t.parameter_name = 'temperature'-- 关联压力标准数据JOIN process_standards ps_p ON pd.product_id = ps_p.product_id AND ps_p.parameter_name = 'pressure') subquery
) final_subquery
GROUP BY product_id, production_date;

最终结果展示

product_idproduction_dateyield_rate
12024-01-0195.00%
12024-02-0193.33%
22024-01-1595.00%
22024-02-1593.33%

最终结果呈现了每个产品在不同生产日期下的良品率情况,通过展示中间结果,我们可以更清晰地理解整个从原始生产数据和制程参数标准,逐步计算到最终良品率的完整过程,方便排查数据和计算逻辑上可能出现的问题,同时也有助于根据业务需求对计算过程进行灵活调整(比如增加更多制程参数的判断等)。

3 小结

如果有更多的制程参数,需要按照类似的方式添加更多的连接和判断条件来确定每个参数是否在合格范围内,并且在计算良品率时也需要考虑所有参数都合格的情况。同时,这种方法可以根据实际业务需求进行调整,例如,如果某些制程参数的权重不同,可以在计算良品率时引入权重因素。

问题拓展:如果制程参数是动态的,如何合理的设计表模型? 

  • 参数定义表(Parameter Definition Table)

  • 目的:用于存储制程参数的基本定义信息,包括参数名称、参数类型、单位等,这些信息相对稳定,不会随着具体生产批次而频繁变化。
  • 结构示例
    Column NameData TypeDescription
    parameter_idInteger制程参数的唯一标识符
    parameter_nameVARCHAR制程参数的名称(如温度、压力等)
    parameter_typeVARCHAR参数的数据类型(如数值型、字符型等)
    unitVARCHAR参数的单位(如摄氏度、帕斯卡等)
  • 用途说明
    • 当有新的制程参数加入时,只需在这个表中添加新的记录,为后续关联其他表提供基础信息。例如,如果新增一个 “湿度” 制程参数,就可以插入一条记录(如parameter_id = 3parameter_name = 'humidity'parameter_type = 'numeric'unit = '%')。

参数标准表(Parameter Standards Table)

  • 目的:存储每个产品对于不同制程参数的合格标准,这是一个动态变化的部分,因为产品的制程标准可能会根据质量要求、工艺改进等因素而改变。
  • 结构示例
    Column NameData TypeDescription
    product_idInteger产品的唯一标识符
    parameter_idInteger制程参数的唯一标识符(关联参数定义表)
    lower_limitDECIMAL(或其他合适类型)制程参数合格范围的下限
    upper_limitDECIMAL(或其他合适类型)制程参数合格范围的上限
  • 用途说明
    • 通过product_idparameter_id的组合,可以灵活地为每个产品定义不同制程参数的合格标准。当制程标准发生变化时,只需更新这个表中的相应记录。例如,如果产品 1 的温度合格范围从95 - 105调整为90 - 100,就可以在这个表中更新对应的记录。
    • 这种设计方便了对不同产品和不同制程参数标准的管理,同时可以通过关联parameter_id与参数定义表,获取完整的参数信息。

生产数据表(Production Data Table)

  • 目的:记录实际生产过程中的详细数据,包括生产批次信息、产品信息、生产数量、次品数量以及实际的制程参数值。
  • 结构示例(包含部分字段)
    Column NameData TypeDescription
    production_idInteger生产批次的唯一标识符
    product_idInteger产品的唯一标识符(关联产品表)
    production_dateDATE生产日期
    quantity_producedInteger生产数量
    quantity_defectiveInteger次品数量
    parameter_value_1DECIMAL(或其他合适类型)第一个制程参数的实际值(关联参数定义表)
    parameter_value_2DECIMAL(或其他合适类型)第二个制程参数的实际值(关联参数定义表)
    .........
  • 用途说明
    • 生产数据表存储了实际生产中的动态数据,其中制程参数的值可以根据生产过程中的实际测量而记录。在设计时,可以根据实际的制程参数数量预留足够的字段(如parameter_value_1parameter_value_2等),并通过程序逻辑或者数据库存储过程来确保这些值的正确插入和更新。
    • 与产品表和参数定义表的关联可以方便地获取产品的其他信息以及制程参数的详细定义,为后续计算良品率等操作提供完整的数据支持。

产品表(Product Table)(可选但推荐)

  • 目的:存储产品的基本信息,如产品名称、产品型号等。这有助于更好地组织和管理生产数据,特别是当涉及多种产品的生产时。
  • 结构示例
    Column NameData TypeDescription
    product_idInteger产品的唯一标识符(关联生产数据表)
    product_nameVARCHAR产品的名称
    product_modelVARCHAR产品的型号
  • 用途说明
    • 通过与生产数据表的关联,可以在查询和分析生产数据时获取产品的详细名称和型号等信息,使数据更具可读性和可分析性。例如,在计算良品率并展示结果时,可以同时显示产品名称和型号,方便用户理解数据。

关联关系和数据完整性约束

  • 关联关系
    • 生产数据表通过product_id与产品表关联,获取产品的基本信息。
    • 生产数据表中的制程参数值字段(如parameter_value_1等)通过参数定义表中的parameter_id间接关联,以确定每个参数值对应的参数名称、类型和单位等信息。
    • 参数标准表通过product_id与生产数据表关联,通过parameter_id与参数定义表关联,从而建立起产品、制程参数标准和实际生产数据之间的完整关系。
  • 数据完整性约束
    • 在参数标准表中,product_idparameter_id的组合应该是唯一的,以确保每个产品对于每个制程参数只有一组合格标准。
    • 在生产数据表中,production_id应该是唯一的,用于唯一标识每个生产批次。同时,可以设置外键约束,确保product_id在产品表中存在,制程参数值字段与参数定义表中的数据类型和其他约束相匹配。

这种表模型设计可以灵活地适应制程参数的动态变化,方便对生产数据和制程标准进行管理、查询和分析,无论是计算良品率还是进行其他质量控制相关的操作都能够提供良好的数据支持。

 

如果您觉得本文还不错,对你有帮助,那么不妨可以关注一下我的数字化建设实践之路专栏,这里的内容会更精彩。

专栏 原价99,现在活动价59.9,按照阶梯式增长,还差5个人上升到69.9,最终恢复到原价。

专栏优势:
(1)一次收费持续更新。

(2)实战中总结的SQL技巧,帮助SQLBOY 在SQL语言上有质的飞越,无论你应对业务难题及面试都会游刃有余【全网唯一讲SQL实战技巧,方法独特】

 SQL很简单,可你却写不好?每天一点点,收获不止一点点-CSDN博客 

(3)实战中数仓建模技巧总结,让你认识不一样的数仓。【数据建模+业务建模,不一样的认知体系】(如果只懂数据建模而不懂业务建模,数仓体系认知是不全面的)

(4)数字化建设当中遇到难题解决思路及问题思考。

我的专栏具体链接如下:

 数字化建设通关指南_莫叫石榴姐的博客-CSDN博客 

378181208b554fc1864232d278e89cde.png

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

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

相关文章

RK3568平台(内存篇)内存管理架构

一.内存管理架构 内核管理内存的基本单位page页: 物理内存被分割成相同大小的组,内核用页来表示这个组,页是内核管理内存的基本单位,尽管处理器的最小可寻址单位通常是字, 但是, 内存管理单元MMU通常以页为单位进行处理. 因此,从虚拟内存的上来看,页就是最小单位. 页帧…

WEB语义化的新探索:浅析LLMs.txt

【引】有人迷恋使用大模型生成各种有趣的内容&#xff0c; 有人沉醉于大模型相关技术的探索&#xff0c;没有对错&#xff0c;只在于你的乐趣所在。 一项名为 llms.txt 的新提案标志了一些非同寻常的东西的出现: 一个Web网站不仅为人类读者服务&#xff0c;而且为人工智能提供服…

YOLOv10改进,YOLOv10利用DLKAttention融合DCNv3、DCNv4形成全新的可变形大核注意力,并二次创新C2f结构,全网首发

理论介绍 完成本篇需要参考以下三篇文章,并已添加到YOLOv10代码中 YOLOv10改进,YOLOv10添加DCNv3可变性卷积与C2f结构融合(无需编译)YOLOv10改进,YOLOv10添加DCNv4可变性卷积(windows系统成功编译),全网最详细教程YOLOv10改进,YOLOv10添加DLKA-Attention可变形大核注意力…

信奥赛CSP-J复赛集训(bfs专题)(5):洛谷P3395:路障

信奥赛CSP-J复赛集训(bfs专题-刷题题单及题解)(5):洛谷P3395:路障 题目描述 B 君站在一个 n n n\times n n

SSM 技术驱动的垃圾分类系统,引领绿色风尚

第1章 概述 1.1 研究背景 随着现代网络技术发展&#xff0c;对于垃圾分类系统现在正处于网络发展的阶段&#xff0c;所以对它的要求也是比较严格的&#xff0c;要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式&#xff0c;依靠网络技术的的快速发展和现代通讯…

【从零开始的LeetCode-算法】1338. 数组大小减半

给你一个整数数组 arr。你可以从中选出一个整数集合&#xff0c;并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1&#xff1a; 输入&#xff1a;arr [3,3,3,3,5,5,5,2,2,7] 输出&#xff1a;2 解释&#xff1a;选择 {3,7…

【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例

从零开始掌握聚类分析&#xff1a;探索数据背后的隐藏模式与应用实例 基本概念聚类分类聚类算法的评价指标&#xff08;1&#xff09;内部指标轮廓系数&#xff08;Silhouette Coefficient&#xff09;DB指数&#xff08;Davies-Bouldin Index&#xff09;Dunn指数 &#xff08…

git的卸载与安装

目录 一、Git的卸载 二、Git的安装 2.1.1 官网下载 2.1.2 镜像下载 ​编辑 2.2 安装 2.3 检验否安装成功 三、Git使用配置 一、Git的卸载 1.找到程序&#xff0c;卸载程序 2.找到Git&#xff0c;右键卸载 卸载完成&#xff01; 二、Git的安装 2.1.1 官网下载 网址&…

java+springboot+mysql高校社团网

项目介绍&#xff1a; 使用javaspringbootmysql开发的高校社团网&#xff0c;系统包含管理员、学生角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;登录系统&#xff1b;首页&#xff1b;用户管理&#xff1b;社团分类管理&#xff1b;社团信息管理&#xff08;社团…

Linux24.04 安装企业微信

今天工作需要把windows系统换成了linux&#xff0c;但是公司的沟通工具是企业微信。去企业微信官网看了&#xff0c;没有linux版本&#xff0c;只能想办法解决了&#xff0c;不然再换回去就太坑了。 方案 1、使用docker容器&#xff0c;2、使用deepin-wine 本人对docker不太熟…

C语言刷题

1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000)&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边(能构成三角形)&#xff0c;中间用一个空格隔开. 输出描述: 一行&#xff0c;三角形周长和面积保留两位小数&#xff0c;中问用一个空…

React第十九章(useContext)

useContext useContext 提供了一个无需为每层组件手动添加 props&#xff0c;就能在组件树间进行数据传递的方法。设计的目的就是解决组件树间数据传递的问题。 用法 const MyThemeContext React.createContext({theme: light}); // 创建一个上下文function MyComponent() {…

【密码学】AES算法

一、AES算法介绍&#xff1a; AES&#xff08;Advanced Encryption Standard&#xff09;算法是一种广泛使用的对称密钥加密&#xff0c;由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年发布。 AES是一种分组密码&#xff0c;支持128位、192位和256位三种不同…

AIGC---------AIGC在数字孪生中的应用

跨越虚拟与现实&#xff1a;AIGC在数字孪生中的应用 引言 近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff0c;Artificial Intelligence Generated Content&#xff09;与数字孪生&#xff08;Digital Twin&#xff09;的结合&#xff0c;成为科技界的热点。AIGC…

金仓数据库全攻略:简化部署,优化管理的全流程指南

金仓数据库 人大金仓&#xff08;KING BASE&#xff09;是一家拥有20多年数据库领域经验的公司&#xff0c;专注于数据库产品的研发和服务。公司曾参与多项国家级重大课题研究&#xff0c;如"863"计划、电子发展基金、信息安全专项等。其核心产品是金仓数据库管理系…

讯飞智文丨一键生成WordPPT

在当今数字化办公的浪潮中,Word和PPT已经成为职场人士日常工作的标配工具。然而,面对繁琐的内容编辑和格式调整任务,如何提升效率成了每个人的追求。而讯飞智文,一款结合人工智能技术的文字处理与演示文稿工具,正逐渐成为用户的得力助手。本文将详细介绍讯飞智文的功能特点…

2024数据库国测揭晓:安全与可靠的新标准,你了解多少?

2024年数据库国测的结果&#xff0c;于9月份的最后一天发布了。 对于数据库行业的从业者来说&#xff0c;国测是我们绕不过去的坎儿。那么什么是国测&#xff1f;为什么要通过国测&#xff0c;以及国测的要求有哪些&#xff1f; 这篇文章带大家一探究竟。 国测 自愿平等、客…

VMware ubuntu12.04怎么设置静态IP联网

记得刚开始学习嵌入式就是从ubuntu12.04的环境开始学习的C语言&#xff0c;当时没有弄清楚怎么设置静态IP联网&#xff0c;现在写一篇文章。 1.首先&#xff0c;关闭ubuntu的网络&#xff1b; 2.电脑使用的是wifi,将VMware桥接到该网卡上&#xff1b; 3.在虚拟机设置里面选择桥…

python 基于 docx 文件模板生成 docx 或 PDF 文件

需求背景 提供一个Word文档模板&#xff0c;使用python程序替换里边的占位符&#xff0c;替换内容包括文本和图片&#xff0c;然后输出docx或者PDF文件。 功能演示 输入示例 输出示例 实现程序 import os import shutil import subprocess import timefrom docx import Doc…

【Python篇】PyQt5 超详细教程——由入门到精通(序篇)

文章目录 PyQt5 超详细入门级教程前言序篇&#xff1a;1-3部分&#xff1a;PyQt5基础与常用控件第1部分&#xff1a;初识 PyQt5 和安装1.1 什么是 PyQt5&#xff1f;1.2 在 PyCharm 中安装 PyQt51.3 在 PyCharm 中编写第一个 PyQt5 应用程序1.4 代码详细解释1.5 在 PyCharm 中运…