开发者社区 问答 正文

如何检查字符串包含和计数结果

我到目前为止编写的代码:

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?

展开
收起
保持可爱mmm 2019-11-18 11:32:33 353 分享 版权
阿里云 AI 助理回答
  1. 问题描述: 您希望在当前的SQL查询中添加passed_test_cases这一列,该列需基于test_cases表中的“状态”列来计算通过的测试案例数量。

  2. 查询背景: 查询涉及两个表,test_casestest_groups,通过group_name字段进行JOIN操作。您已成功统计了每个组的总测试案例数(all_test_cases)和总价值(total_value),现在需要加入通过测试案例的数量。

  3. 现有查询语句

    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
    
  4. 问题分析

    • 当前查询缺少对test_cases表中“状态”列的筛选,以区分通过的测试案例。
    • 需要增加一个条件来识别哪些是通过的测试案例(假设“状态”列中,“PASS”表示通过)。
  5. 优化建议

    • SELECT子句中添加一个新的聚合函数SUM(CASE WHEN ... THEN 1 ELSE 0 END)来计算通过的测试案例数。
    • 使用CASE表达式检查“状态”列,当状态为“PASS”时计数。
  6. 示例优化查询

    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
    
  7. 注意事项

    • 确保status列存在于test_cases表中,并且其值确实使用“PASS”来标记通过的测试案例。
    • 如果status列可能包含非预期的值或空值,考虑在CASE表达式中加入额外的条件处理逻辑。
  8. 参考资料: 无直接关联的知识库信息,但上述解决方案基于通用SQL实践。

通过上述优化,您的查询将不仅统计所有测试案例数和总价值,还会额外提供每个组通过的测试案例数量。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: