带计数的SQL查询

时间:2012-02-28 18:30:18

标签: mysql sql

我确定这很容易,但是我有一个块我正在尝试针对单个表编写一些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

6 个答案:

答案 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'