代码之家  ›  专栏  ›  技术社区  ›  Jason Coigny

组合多个sql语句

  •  0
  • Jason Coigny  · 技术社区  · 6 年前

    我目前有一组来自数据库的查询,但我想不出一种方法来将这些查询转换为一个查询,以提高效率并保持数据之间的相关性。testrecord表包含每个测试运行的1行数据,包括siteid代码,它是包含公司名称的site表的主键。

    SELECT COUNT(`teststatus`) AS `total tested` 
    FROM `testrecord`;
    
    SELECT COUNT(`teststatus`) AS `passed` 
    FROM `testrecord` 
    WHERE `teststatus` = 0;
    
    SELECT `companyname` 
    FROM `site` 
    INNER JOIN testrecord ON `site`.`siteid` = `testrecord`.`siteid` 
    GROUP BY `site`.`siteid`;
    

    我正在寻找一个返回以下基本格式的查询:

    total tested | passed | companyname
    -------------+--------+-----------
        76       |   68   | company1
       156       |  150   | company2
    

    我正在使用MySql并从我的php网站运行查询。

    1 回复  |  直到 3 年前
        1
  •  1
  •   Gordon Linoff    6 年前

    你似乎想要这样的东西:

    SELECT s.companyname, count(*) as total_tested,
           SUM( tr.teststatus = 0 ) as passed
    FROM site s INNER JOIN
         testrecord tr
         ON tr.siteid = s.siteid
    GROUP BY s.siteid;
    

    以上假设您使用的是MySQL(背景符号表示MySQL)。如果没有,则 SELECT 应如下所示:

    SELECT s.companyname, count(*) as total_tested,
           SUM(CASE WHEN tr.teststatus = 0 THEN 1 ELSE 0 END) as passed