Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何改进此SQL查询?;_Sql - Fatal编程技术网

如何改进此SQL查询?;

如何改进此SQL查询?;,sql,Sql,我是这里的新手,我有一张表来存储一些测试结果 这些列可以简化为2列: EXECUTION_ID int(6) CASE_ID int(11) RESULT varchar(10). 列“RESULT”实际上是一个枚举,将值保存在'PASS',*'FAIL','NORESULT'* 现在我想使用一个sql查询来获取所有执行的统计信息 结果集格式如下: EXECUTION_ID | PASS_CNT FAIL_CNT | NORESULT_CNT 我只能找到一种方法来实现它,如下所示: se

我是这里的新手,我有一张表来存储一些测试结果

这些列可以简化为2列:

EXECUTION_ID int(6) CASE_ID int(11)
RESULT varchar(10).
列“RESULT”实际上是一个枚举,将值保存在'PASS',*'FAIL''NORESULT'*

现在我想使用一个sql查询来获取所有执行的统计信息

结果集格式如下:

EXECUTION_ID | PASS_CNT FAIL_CNT  |  NORESULT_CNT
我只能找到一种方法来实现它,如下所示:

select A.execId,A.a,B.a,C.a from
    (select execId,result,count(result) a from STAT_RESULTS group by execId,result having result='PASS') A left join
    (select execId,result,count(result) a from STAT_RESULTS group by execId,result having result='FAIL') B on A.execId=B.execId left join
    (select execId,result,count(result) a from STAT_RESULTS group by execId,result having result='NORESULT') C on A.execId=C.execId;
execId  pass    fail    noresult
55      169     77      null
56      46      9       1
57      120     13      3
58      91      45      null
59      95      44      null
60      179     9       5
结果如下所示:

select A.execId,A.a,B.a,C.a from
    (select execId,result,count(result) a from STAT_RESULTS group by execId,result having result='PASS') A left join
    (select execId,result,count(result) a from STAT_RESULTS group by execId,result having result='FAIL') B on A.execId=B.execId left join
    (select execId,result,count(result) a from STAT_RESULTS group by execId,result having result='NORESULT') C on A.execId=C.execId;
execId  pass    fail    noresult
55      169     77      null
56      46      9       1
57      120     13      3
58      91      45      null
59      95      44      null
60      179     9       5
有没有更好的方法来做同样的事情

谢谢大家!

怎么样

select 
s.execid EXECUTION_ID
,sum(case when s.result='PASS' then 1 else 0 end) PASS_CNT 
,sum(case when s.result='FAIL' then 1 else 0 end) FAIL_CNT
,sum(case when s.result='NORESULT' then 1 else 0 end) NORESULT_CNT
from STAT_RESULTS s
group by s.execid

这应该是什么数据库引擎?MySQL,Oracle。。。?查看这篇文章@s.bandara:由于涉及到枚举类型,因此几乎只能是MySQLGreat,那么该教程正适合他。@s.bandara非常感谢!这就是我需要的!我只是在使用mysql,但我仍然想知道是否有一个适用于所有数据库的通用解决方案。