我到目前为止编写的代码:
SELECT test_cases.group_name AS name, COUNT(test_cases.group_name) AS all_test_cases, SUM(test_groups.test_value) AS total_value FROM test_cases JOIN test_groups ON test_cases.group_name = test_groups.name GROUP BY group_name 唯一遗漏的是passed_test_cases和total_value。我知道如何获取total_value,但是我无法解决pass_test_cases的问题。如何基于test_cases中的“状态”列获取passed_test_cases?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题描述: 您希望在当前的SQL查询中添加passed_test_cases
这一列,该列需基于test_cases
表中的“状态”列来计算通过的测试案例数量。
查询背景: 查询涉及两个表,test_cases
和test_groups
,通过group_name
字段进行JOIN操作。您已成功统计了每个组的总测试案例数(all_test_cases
)和总价值(total_value
),现在需要加入通过测试案例的数量。
现有查询语句:
SELECT
test_cases.group_name AS name,
COUNT(test_cases.group_name) AS all_test_cases,
SUM(test_groups.test_value) AS total_value
FROM
test_cases
JOIN
test_groups ON test_cases.group_name = test_groups.name
GROUP BY
group_name
问题分析:
test_cases
表中“状态”列的筛选,以区分通过的测试案例。优化建议:
SELECT
子句中添加一个新的聚合函数SUM(CASE WHEN ... THEN 1 ELSE 0 END)
来计算通过的测试案例数。示例优化查询:
SELECT
test_cases.group_name AS name,
COUNT(test_cases.group_name) AS all_test_cases,
SUM(test_groups.test_value) AS total_value,
SUM(CASE WHEN test_cases.status = 'PASS' THEN 1 ELSE 0 END) AS passed_test_cases
FROM
test_cases
JOIN
test_groups ON test_cases.group_name = test_groups.name
GROUP BY
group_name
注意事项:
status
列存在于test_cases
表中,并且其值确实使用“PASS”来标记通过的测试案例。status
列可能包含非预期的值或空值,考虑在CASE表达式中加入额外的条件处理逻辑。参考资料: 无直接关联的知识库信息,但上述解决方案基于通用SQL实践。
通过上述优化,您的查询将不仅统计所有测试案例数和总价值,还会额外提供每个组通过的测试案例数量。