所以,我有这个数据库,其中包含一些在线文章,他们的标题,他们的作者,和一个日志历史记录,其中包含有多少人登录到网站上阅读哪篇文章和什么时候。
数据库有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/

10-10 13:30
查看更多