所以,我有这个数据库,其中包含一些在线文章,他们的标题,他们的作者,和一个日志历史记录,其中包含有多少人登录到网站上阅读哪篇文章和什么时候。
数据库有3个表
Authors表,包含列:
姓名、简历、身份证(作者身份证)
带列的项目表:
author(具有来自表author s的ID值)、title、slug、lead、time、body、ID(文章ID)
日志表,包含列:
路径、IP、方法、状态、时间、ID(用户ID)
需要确定超过1%的请求在哪天导致错误?
这是通过表日志中的列:time和status来确定的,status列包含值:OK以指示已成功加载网页,或者值:404 not found以指示未成功的日志。
我试着想出以下解决方案:
select time::DATE, 100.*count(status)/(select count(*) from log) as error
from log
where log.status ='404 NOT FOUND'
group by time::DATE;
但它给了我一张满是零的桌子。
有谁能帮我计算出正确的百分比吗?
最佳答案
您可以尝试在HAVING
子句中使用条件聚合。
SELECT time::date,
count(CASE
WHEN status = '404 NOT FOUND' THEN
1
END)::decimal
/ count(*)
* 100 error
FROM log
GROUP BY time::date
HAVING count(CASE
WHEN status = '404 NOT FOUND' THEN
1
END)::decimal
/ count(*)
* 100
> 1;
关于sql - 如何在SQL中计算百分比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57318005/