Manufacturing processes for any product is like putting together a puzzle. Products are pieced together step by step, and keeping a close eye on the process is important.
For this project, you're supporting a team that wants to improve how they monitor and control a manufacturing process. The goal is to implement a more methodical approach known as statistical process control (SPC). SPC is an established strategy that uses data to determine whether the process works well. Processes are only adjusted if measurements fall outside of an acceptable range.
This acceptable range is defined by an upper control limit (UCL) and a lower control limit (LCL), the formulas for which are:
The UCL defines the highest acceptable height for the parts, while the LCL defines the lowest acceptable height for the parts. Ideally, parts should fall between the two limits.
Using SQL window functions and nested queries, you'll analyze historical manufacturing data to define this acceptable range and identify any points in the process that fall outside of the range and therefore require adjustments. This will ensure a smooth running manufacturing process consistently making high-quality products.
The data
The data is available in the manufacturing_parts
table which has the following fields:
item_no
: the item numberlength
: the length of the item madewidth
: the width of the item madeheight
: the height of the item madeoperator
: the operating machine
SELECT
outer_subquery.*,
CASE WHEN outer_subquery.height NOT BETWEEN outer_subquery.lcl AND outer_subquery.ucl
THEN TRUE
ELSE FALSE
END AS alert
--OUTER_SUBQUERY
FROM (
SELECT
inner_subquery.*,
inner_subquery.avg_height+3*inner_subquery.stddev_height/SQRT(5) AS ucl, --Upper control height limit
inner_subquery.avg_height-3*inner_subquery.stddev_height/SQRT(5) AS lcl --Lower Control height limit
-- INNER SUBQUERY
FROM (SELECT
--Operator
operator,
--Row number
ROW_NUMBER() OVER(PARTITION BY operator ORDER BY item_no ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
AS row_number,
--Height
height,
--Moving average height
AVG(height) OVER(PARTITION BY operator ORDER BY item_no ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
AS avg_height,
--Moving standard deviation from height
STDDEV(height) OVER(PARTITION BY operator ORDER BY item_no ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
AS stddev_height
FROM manufacturing_parts
) as inner_subquery -- inner_subquery
WHERE inner_subquery.row_number >= 5
) as outer_subquery -- outer_subquery