我确定这很容易,但是我有一个块我正在尝试针对单个表编写一些sql(例如简化)
RunName, Result
foo, pass
foo, pass
foo, fail
foo, pass
boo, pass
boo, fail
boo, fail
soo, pass
我是一个查询,它将返回每个名称的通过或失败计数
类似于失败的东西
foo, 1
boo, 2
soo, 0
和传递
foo, 3
boo, 1
soo, 1
答案 0 :(得分:4)
通常你会做一个简单的COUNT和GROUP BY RunName,但that will not show "zero results" like soo's fails。
这甚至可以用于零结果(在MySQL上)
SELECT RunName, SUM(Result='fail')
FROM TableA
GROUP BY RunName;
演示here。
编辑:正如Aaron指出的那样,这只适用于MySQL,这也适用于SQL Server;
SELECT RunName, SUM(CASE WHEN Result = 'fail' THEN 1 ELSE 0 END) as fails
FROM TableA
GROUP BY RunName
演示here。
Edit2:正如Marcus指出的那样,它可能不是一种非常友好的索引方式,所以如果你有一个主键,你可能最好用计数/组进行自我联接以获得正确的结果;
SELECT a.RunName, COUNT(b.Result)
FROM TableA a LEFT JOIN TableA b ON a.id=b.id AND b.Result='fail'
GROUP BY RunName
演示here。
答案 1 :(得分:2)
这适用于所有失败结果,只需更改传递的where
子句:
select RunName, count(Result)
from [tableName]
where Result = 'fail'
group by RunName
答案 2 :(得分:1)
试试fail
select RunName, count(Result) as cnt
from your_table
where Result = 'fail'
group by RunName
和pass
select RunName, count(Result) as cnt
from your_table
where Result = 'pass'
group by RunName
答案 3 :(得分:1)
您需要使用分组。
像这样的东西
Select count(result), runname, result from sometable
group by runname, result
这应该给你输出像
计算runname结果
2 foo pass
3 foo失败
答案 4 :(得分:1)
这是你想要的吗?
SELECT RunName, SUM(CASE WHEN Result = 'pass' THEN 1 ELSE 0 END) as NumPass,
SUM(CASE WHEN Result = 'fail' THEN 1 ELSE 0 END) as NumFail
FROM yourtable
GROUP BY RunName
如果你想要每个单独的结果,那么你可以对where子句进行过滤,如下所示:
SELECT RunName, COUNT(1) as NumPass
FROM yourtable
WHERE Result = 'pass'
GROUP BY RunName
SELECT RunName, COUNT(1) as NumFail
FROM yourtable
WHERE Result = 'fail'
GROUP BY RunName
答案 5 :(得分:0)
试试这个:
通行证:
SELECT RunName, COUNT(*)
FROM TableName
GROUP BY Result
WHERE UPPER(Result) = 'PASS'
失败:
SELECT RunName, COUNT(*)
FROM TableName
GROUP BY Result
WHERE UPPER(Result) = 'FAIL'