查询各产品型号连续三个月合格率低于0.98,SQL怎么写

如下图,各产品型号连续三个月合格率低于0.98,SQL应该怎么写?

img

你是什么数据库,由于没有现成的表测试,给一个基础逻辑

SELECT DISTINCT 产品型号
FROM 产品表
WHERE 月份 BETWEEN '2023-01' AND '2023-05'
GROUP BY 产品型号, SUBSTRING(month, 6, 2)
HAVING AVG(合格率) < 0.98

【以下回答由 GPT 生成】

问题解答:

要解决这个问题,需要使用窗口函数和子查询来计算连续三个月的合格率,并将查询结果与条件进行筛选。以下是具体的步骤:

  1. 使用窗口函数计算每个产品在每个月的合格率。合格率可以通过将"PassCount"除以"Total"来计算。可以使用以下SQL语句来实现(我将结果存储在一个名为"qualifications"的临时表中):
CREATE TEMPORARY TABLE qualifications AS
SELECT ID, Product, Month, PassCount, Total, PassCount/Total AS QualificationRate
FROM your_table;
  1. 使用子查询计算每个产品连续三个月的合格率是否低于0.98。可以使用以下SQL语句来实现:
SELECT Product
FROM (
  SELECT Product, QualificationRate,
         ROW_NUMBER() OVER(PARTITION BY Product ORDER BY Month) AS rn
  FROM qualifications
) AS subquery
WHERE rn <= 3
GROUP BY Product
HAVING MIN(QualificationRate) < 0.98;

上述子查询使用ROW_NUMBER()函数来对每个产品按照月份排序,并使用PARTITION BY子句按照产品分组。然后,我们选择每个产品的前三个连续月份的合格率,并筛选出合格率低于0.98的产品。

这样就可以获得合格率连续三个月低于0.98的产品型号。

如果您对上述解决方案有任何疑问,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

连续三个月是什么意思