要求:
我正在尝试使用 group_contact 和 sum 增强 sql 查询。但我没能成功。
SQL 查询:
SELECT
team.application_name AS 'Project',
regression.automated_test_type AS 'SuiteType',
SUM(regression.total_testcases) AS 'Total',
SUM(regression.passed_testcases) AS 'Passed',
SUM(regression.failed_testcases) AS 'Failed',
regression.test_environment AS 'Environment'
FROM
regression,
team
WHERE
execution_date >= CURDATE() - INTERVAL 7 DAY
AND regression.automated_test_type <> 'Regression'
AND regression.report_link NOT LIKE '%Automation_Q002envHc%'
AND regression.report_link NOT LIKE '%LitVmEnvHealthChecks%'
AND team.application_id = regression.regression_application_id
AND team.application_name <> 'Not Mapped'
GROUP BY regression_application_id , regression.test_environment
ORDER BY team.application_name ASC , regression.automated_test_type ASC , regression.test_environment ASC;
当前查询输出:
----------------------------------------------------------------------
Project SuiteType Total Passed Failed Environment
----------------------------------------------------------------------
Application 1 Health Check 30 22 8 IQA
Application 2 Build Validation Test 33 21 12 IQA
Application 2 Build Validation Test 24 11 13 PROD
Application 3 Build Validation Test 399 321 78 IQA
预期输出
------------------------------------------------------
Project SuiteType Environment
------------------------------------------------------
Application 1 Health Check IQA->30,22,8
Application 2 Build Validation Test IQA->33,21,12|PROD->24,11,13
Application 3 Build Validation Test IQA->399,321,78
我根据评论和答案编辑了查询。还是没有运气。
根据评论编辑答案
SELECT
T.Project,
T.SuiteType,
GROUP_CONCAT(CONCAT(T.Environment,
'->',
T.Passed,
',',
T.Failed)
ORDER BY T.Environment
SEPARATOR '|') AS 'Environment'
FROM
(SELECT
team.application_name AS 'Project',
regression.automated_test_type AS 'SuiteType',
SUM(regression.passed_testcases) AS 'Passed',
SUM(regression.failed_testcases) AS 'Failed',
regression.test_environment AS 'Environment'
FROM
regression, team
WHERE
execution_date >= CURDATE() - INTERVAL 7 DAY
AND regression.automated_test_type <> 'Regression'
AND regression.report_link NOT LIKE '%Automation_Q002envHc%'
AND regression.report_link NOT LIKE '%LitVmEnvHealthChecks%'
AND team.application_id = regression.regression_application_id
AND team.application_name <> 'Not Mapped'
GROUP BY regression_application_id , regression.test_environment
ORDER BY team.application_name ASC , regression.automated_test_type ASC , regression.test_environment ASC) T
GROUP BY T.Project , T.SuiteType
ORDER BY T.Project , T.SuiteType
最佳答案
除非我遗漏了一些东西,否则看起来所需的输出列是已返回的表达式和一些文字的串联
SELECT ...
, CONCAT( expr1 , '->' , expr2 , ',' , expr3 , ',' , expr4 ) AS `Environment`
FROM ...
--
像这样:
SELECT ...
, CONCAT( regression.test_environment
, '->'
, SUM(regression.total_testcases)
, ','
, SUM(regression.passed_testcases)
, ','
, SUM(regression.failed_testcases)
) AS `Environment`
FROM ...
请注意,如果这些表达式中的任何一个的计算结果为 NULL,则 CONCAT 的返回将为 NULL。我们可能希望为 NULL 情况添加一些处理,例如使用 IFNULL 函数,或 CONCAT_WS 代替 CONCAT。
<小时/>要按 Project
和 TestSuite
进行“分组”,一种选择是采用上面的查询,并将其引用为外部查询中的内联 View :
SELECT v.Project
, v.SuiteType
, GROUP_CONCAT(v.Environment ORDER BY v.Environment SEPARATOR '|') AS Environment
FROM ( -- inline view query
SELECT ...
, CONCAT( regression.test_environment
, '->'
, SUM(regression.total_testcases)
, ','
, SUM(regression.passed_testcases)
, ','
, SUM(regression.failed_testcases)
) AS `Environment`
FROM ...
) v
GROUP
BY v.Project
, v.SuiteType
ORDER
BY v.Project
, v.SuiteType
关于MySql:如何使用带有 Sum 的 group_concat 修复 mysql 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42300684/