MySql:如何使用带有 Sum 的 group_concat 修复 mysql 查询?

标签 mysql

要求:

我正在尝试使用 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。

<小时/>

要按 ProjectTestSuite 进行“分组”,一种选择是采用上面的查询,并将其引用为外部查询中的内联 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/

相关文章:

php - Laravel 使用 on 子句模型名称与多态数据透视表连接

mysql - MyISAM表意外丢失,我丢失了1个月的数据,而且我的主机没有备份

MySQL 存储过程 : Variable set is null though query returns results

mysql - PDO 使用 bindParam 返回 MySQL 错误

Mysql:搜索一列中具有相同值的所有行

Mysql Group_Concat函数

java - 无法在 Hibernate 5.1.0.Final 中配置 hibernate-ehcache-4.3.5.Final.jar 的二级缓存

mysql - MySQL 中的 MAX 函数未返回正确的键值

php - 在保存到 MySQL 数据库之前调整图像大小

mysql - 创建表空间 "error in creating database file, access denied (OS 5)"