gpt4 book ai didi

mysql - 从连接表中获取计数

转载 作者:行者123 更新时间:2023-11-29 21:44:20 27 4
gpt4 key购买 nike

这是我的问题:我需要获取与满足某些条件的项目相关的测试用例和问题的数量(成功的测试用例和应用程序缺陷的问题),但由于某种原因,该数量没有不加起来。我在一个项目中有10个测试用例,其中6个是成功的; 8个问题,其中只有4个是缺陷。但是,COUNT 的相应结果均显示 24,这是没有意义的。不过,我确实注意到 24 恰好是 6 乘以 4,但我不知道查询如何将它们相乘。

无论如何...有人可以帮我找出查询的哪一部分是错误的吗?我怎样才能得到正确的结果?提前致谢。

这是查询:

SELECT
p.codigo_proyecto,
p.nombre,
IFNULL(COUNT(iep.id_incidencia_etapa_proyecto), 0) AS cantidad_defectos,
IFNULL(COUNT(tc.id_test_case), 0) AS test_cases_exitosos,
CASE IFNULL(COUNT(tc.id_test_case), 0) WHEN 0 THEN 'No aplica'
ELSE CONCAT((IFNULL(COUNT(tc.id_test_case), 0) / IFNULL(COUNT(tc.id_test_case), 0)) * 100, '%') END AS tasa_defectos
FROM proyecto p
INNER JOIN etapa_proyecto ep ON p.codigo_proyecto = ep.codigo_proyecto
INNER JOIN incidencia_etapa_proyecto iep ON ep.id_etapa_proyecto = iep.id_etapa_proyecto
INNER JOIN incidencia i ON iep.id_incidencia = i.id_incidencia
INNER JOIN test_case tc ON ep.id_etapa_proyecto = tc.id_etapa_proyecto
INNER JOIN etapa_proyecto ep_ultima ON ep_ultima.id_etapa_proyecto =
(SELECT ep_ultima2.id_etapa_proyecto FROM etapa_proyecto ep_ultima2
WHERE p.codigo_proyecto = ep_ultima2.codigo_proyecto ORDER BY ep_ultima2.fecha_termino_real DESC LIMIT 1)
WHERE p.esta_cerrado = 1
AND i.es_defecto = 1
AND tc.resultado = 'Exitoso'
AND ep_ultima.fecha_termino_real BETWEEN '2015-01-01' AND '2016-12-31';

最佳答案

我认为很明显,如果没有 GROUP BY,您将无法从聚合查询中获得预期的输出(这表明您实际上无法有效地评估此处给出的任何建议)。

您没有说明数据的状态在数据库中是如何表示的 - 所以我不得不根据 SQL 进行大量猜测,这显然是非常错误的。而且我不会说西类牙语/葡萄牙语或任何您的母语。

如果缺陷表的主键为空,您似乎推断存在缺陷。主键不能为空。唯一有意义的方法(顺便说一句,它仍然不会给你你正在寻找的答案)是做一个 LEFT JOIN 而不是 INNER JOIN。

但即使如此,简单的 COUNT() 也会将 null 情况(源表中没有记录)视为输出集中的 1 条记录。

那么你就会遇到这样的问题:你的输出中将包含缺陷和测试用例的乘积 - 考虑没有缺陷,但有 2 个测试用例 (1,2) 的情况 - 外部联接的结果将是:

defect   test
------ ----
null 1
null 2

如果您只计算行数,您将在输出中发现 2 个缺陷。

采用更简单的模式,这演示了获取值的两种方法 - 请注意,它们具有非常不同的性能特征。

SELECT project.id
, dilv.defects
, (SELECT COUNT(*)
FROM test_cases) AS tests
FROM project
LEFT JOIN ( SELECT project_id, COUNT(*) AS defects
FROM defect_table
GROUP BY project_id) AS dilv
ON project.id=dilv.project_id

关于mysql - 从连接表中获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34223385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com