SQL запрос с подсчетом - PullRequest
       3

SQL запрос с подсчетом

0 голосов
/ 28 февраля 2012

Я уверен, что это легко, но у меня есть блок. Я пытаюсь написать несколько 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 ]

4 голосов
/ 28 февраля 2012

Обычно вы выполняете простое COUNT и GROUP BY RunName, но , который не будет показывать "нулевые результаты", как ошибки soo .

Это должно работать даже при нулевых результатах (на MySQL)

SELECT RunName, SUM(Result='fail')
FROM TableA
GROUP BY RunName;

Демо здесь .

Редактировать: Как указывает Аарон, это толькоработает на MySQL, это работает и на SQL Server;

SELECT  RunName, SUM(CASE WHEN Result = 'fail' THEN 1 ELSE 0 END) as fails
FROM   TableA
GROUP BY RunName

Демо здесь .

Edit2: Как отмечает Маркус, это может быть не очень благоприятно для индексаспособ выполнения запроса, поэтому, если у вас есть первичный ключ, вам лучше выполнить самостоятельное объединение со счетчиком / группой, чтобы получить правильный результат;

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

Демо здесь .

2 голосов
/ 28 февраля 2012

Это для всех результатов сбоев, просто измените предложение where для pass:

select RunName, count(Result)
from [tableName]
where Result = 'fail'
group by RunName
1 голос
/ 28 февраля 2012

Это то, что вы хотите?

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
1 голос
/ 28 февраля 2012

Вы должны использовать группу по.

Что-то вроде этого

Select count(result), runname, result from sometable
group by runname, result

это должно дать вам вывод, такой как

Результат подсчета имен

2 прохода foo

3 сбой foo

1 голос
/ 28 февраля 2012

Попробуйте это для 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
0 голосов
/ 28 февраля 2012

Попробуйте это:

Для пропуска:

SELECT RunName, COUNT(*)
FROM TableName
GROUP BY Result
WHERE UPPER(Result) = 'PASS'

для сбоя:

SELECT RunName, COUNT(*)
FROM TableName
GROUP BY Result
WHERE UPPER(Result) = 'FAIL'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...