sql - SQL中如何计算百分比

标签 sql postgresql

所以,我有这个数据库,其中包含一些在线文章、文章的标题、作者,以及一个日志历史记录,其中包含有多少人登录该网站阅读哪篇文章以及何时阅读。

数据库有3张表 作者表,包含列: names, bio, ID(作者的id)

包含列的文章表: author(具有来自表 authors 的 ID 值)、title、slug、lead、time、body、id(文章的 id)

日志表,包含列: 路径、IP、方法、状态、时间、ID(用户的id)

需要确定哪些天超过 1% 的请求导致了错误? 这是通过列确定的:来自表日志的时间和状态,状态列包含值:OK 以指示网页加载成功,或值:< strong>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;

但它给了我一张满是零的表格。 谁能帮我计算正确的百分比?

最佳答案

如果您使用的是高于 9.4 的版本,可以使用 FILTER 来完成。子句,只需记住将计数转换为 float 或数字 ::real::double precision::numeric

SELECT
    time::date,
    count(*) as total,
    (
        count(status) filter (where log.status = '404 NOT FOUND') /
        count(*)::real
    ) * 100 as error
FROM log
GROUP BY time::date
HAVING count(*) > 0

关于sql - SQL中如何计算百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57318005/

相关文章:

mysql - 许多连接中的 SQL 限制

sql - Oracle SQL - 如何在一行中显示一对多关系?

mysql - 多表中的 SQL 搜索

postgresql - PostgreSQL 中的表不可见 - 不同 session 中未定义的关系问题

sql - PostgreSQL 查询选择上周的数据?

java - 如何中止 JDBC Postgresql CopyManager 复制?

java - Android 时间和字符串

sql - 如何从字符串中获取部分字符串

sql - 从一列中选择在关联列中只有一个值的所有元素

sql - ORDER BY 取决于列类型