我需要写一个查询,告诉我在最近二十次尝试中测试失败了多少次(但仅计算今天进行的尝试,并且仅当今天至少进行了二十次尝试时才计入。)我对那些尝试特别感兴趣在最近20次迭代中失败10次或更多次的结果。
架构:
test_results
-----------------
id
test_id
status (0 failed, 1 passed)
date_ran
这是我在失去剧情之前所走的路:
SELECT count(*) as num_failed, test_id
FROM test_results
WHERE
date_ran > '2011-03-21 00:00:00'
AND
status = 0
AND
test_id IN ( -- some sort of subquery that gives me tests that have run
at least 20 times today, regardless of status --)
GROUP BY test_id
HAVING num_failed > 9
ORDER BY date_ran DESC
最佳答案
以下应返回所有今天已运行至少20次的测试,其中至少有10个失败。
select test_id
,count(*) as num_runs
,sum(status) as passed
,count(*) - sum(status) as failed
from test_results
where date_ran = current_date
group
by test_id
having count(*) >= 20
and count(*) - sum(status) >= 10;
我利用了status = 1可以求和的事实。如果您还有其他状态值,则需要使用CASE / WHEN表达式。
关于mysql - 我该如何编写查询以返回最近二十条中处于特定状态的记录数(但仅当今天发生了二十条时)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5381201/