如何改进此SQL查询?;
我是这里的新手,我有一张表来存储一些测试结果 这些列可以简化为2列:如何改进此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
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,但我仍然想知道是否有一个适用于所有数据库的通用解决方案。