57 lines
1.3 KiB
SQL
57 lines
1.3 KiB
SQL
WITH material_lookup(material, score) AS (
|
|
(VALUES
|
|
('metal', 0.15),
|
|
('wood', 1),
|
|
('resin', 0),
|
|
('fabric', 0.5),
|
|
('plastic', 0.25)
|
|
)
|
|
),
|
|
|
|
origin_lookup(origin, score) AS (
|
|
(VALUES
|
|
('usa', 1),
|
|
('imported', 0),
|
|
('mixed', 0.5)
|
|
)
|
|
),
|
|
|
|
unnested_materials AS (
|
|
SELECT
|
|
primary_category,
|
|
unnest(materials) unnested_material
|
|
FROM {{ params.products_table }}
|
|
),
|
|
|
|
material_scores AS (
|
|
SELECT
|
|
primary_category,
|
|
AVG(material_lookup.score) AS score
|
|
FROM unnested_materials
|
|
JOIN material_lookup
|
|
ON unnested_materials.unnested_material = material_lookup.material
|
|
GROUP BY primary_category
|
|
),
|
|
|
|
scores AS (
|
|
SELECT
|
|
tcin,
|
|
material_scores.score AS material_score,
|
|
weight * 0.75 AS weight_score,
|
|
packaging * 0.6 AS packaging_score,
|
|
origin_lookup.score AS origin_score
|
|
FROM {{ params.products_table }} AS products
|
|
LEFT JOIN material_scores USING (primary_category)
|
|
LEFT JOIN origin_lookup USING (origin)
|
|
)
|
|
|
|
INSERT INTO {{ params.scored_table }}
|
|
SELECT
|
|
tcin,
|
|
material_score,
|
|
weight_score,
|
|
packaging_score,
|
|
origin_score,
|
|
material_score + weight_score + packaging_score + origin_score AS score
|
|
FROM scores;
|