【问题标题】:sql multiple countssql多次计数
【发布时间】:2019-12-19 19:43:59
【问题描述】:

我有两个执行计数的查询。一个是总计数,下一个是通过的测试用例的总计数。

我想为此编写一个查询(有一个结果集)。我怎么可能返回一个返回以下内容的表

|Release Name| Total Count | Passed


SELECT
REL.REL_NAME as "Release Name",
count(REL.REL_NAME) as "Total Count"
FROM TEST TST
INNER JOIN TESTCYCL TCY ON TST.TS_TEST_ID = TCY.TC_TEST_ID
INNER JOIN CYCLE CYC ON TCY.TC_CYCLE_ID = CYC.CY_CYCLE_ID
INNER JOIN RELEASE_CYCLES RCY ON CYC.CY_ASSIGN_RCYC = RCY.RCYC_ID
INNER JOIN RELEASES REL ON REL.REL_ID = RCY.RCYC_PARENT_ID
GROUP BY REL.REL_NAME
ORDER BY REL.REL_NAME

SELECT
REL.REL_NAME as "Release Name",
count(REL.REL_NAME) as "Passed"
FROM TEST TST
INNER JOIN TESTCYCL TCY ON TST.TS_TEST_ID = TCY.TC_TEST_ID
INNER JOIN CYCLE CYC ON TCY.TC_CYCLE_ID = CYC.CY_CYCLE_ID
INNER JOIN RELEASE_CYCLES RCY ON CYC.CY_ASSIGN_RCYC = RCY.RCYC_ID
INNER JOIN RELEASES REL ON REL.REL_ID = RCY.RCYC_PARENT_ID
WHERE TC_STATUS = 'Passed'
GROUP BY REL.REL_NAME
ORDER BY REL.REL_NAME`

【问题讨论】:

    标签: sql count


    【解决方案1】:

    这会给你两个结果:

    SELECT
    REL.REL_NAME as "Release Name",
    count(REL.REL_NAME) as "Total Count"
    sum(case when TC_STATUS = 'Passed' then 1 else 0 end) as "Passed"
    FROM TEST TST
    INNER JOIN TESTCYCL TCY ON TST.TS_TEST_ID = TCY.TC_TEST_ID
    INNER JOIN CYCLE CYC ON TCY.TC_CYCLE_ID = CYC.CY_CYCLE_ID
    INNER JOIN RELEASE_CYCLES RCY ON CYC.CY_ASSIGN_RCYC = RCY.RCYC_ID
    INNER JOIN RELEASES REL ON REL.REL_ID = RCY.RCYC_PARENT_ID
    
    GROUP BY REL.REL_NAME
    ORDER BY REL.REL_NAME`
    

    【讨论】:

      【解决方案2】:

      使用条件聚合:

      SELECT
      REL.REL_NAME as "Release Name",
      COUNT(REL.REL_NAME) as "Total Count",
      COUNT(CASE WHEN TC_STATUS = 'Passed' THEN REL.REL_NAME END) as "Passed"
      FROM TEST TST
      INNER JOIN TESTCYCL TCY ON TST.TS_TEST_ID = TCY.TC_TEST_ID
      INNER JOIN CYCLE CYC ON TCY.TC_CYCLE_ID = CYC.CY_CYCLE_ID
      INNER JOIN RELEASE_CYCLES RCY ON CYC.CY_ASSIGN_RCYC = RCY.RCYC_ID
      INNER JOIN RELEASES REL ON REL.REL_ID = RCY.RCYC_PARENT_ID
      GROUP BY REL.REL_NAME
      ORDER BY REL.REL_NAME
      

      【讨论】:

        【解决方案3】:

        不确定您是否正在寻找类似的东西..

        --样本表--

        create table rel
        (
        tst_id int,
        Release_Name varchar(50)
        );
        
        
        insert into rel values
        (1,'Jan_Release'),
        (2,'Feb_Release'),
        (3,'Mar_Release'),
        (2,'Mar_Release'),
        (1,'Feb_Release');
        
        create table tst
        (
        tst_id int,
        tc_status varchar(50)
        );
        
        insert into tst values
        (1,'Pass'),
        (2,'Fail'),
        (3,'Pass');
        

        --样本数据--

        --使用的查询--

        select 
        rel.Release_Name,
        count(rel.Release_Name) as Total_Count,
        sum(case when tst.tc_status = 'Pass' then 1 else 0 end) as "Passed"
        from rel
        inner join tst on rel.tst_id=tst.tst_id
        group by rel.release_name
        order by rel.release_name;
        

        --结果集--

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-17
          • 1970-01-01
          相关资源
          最近更新 更多