【问题标题】:PERCENTAGE USING TWO DIFFERENT COLUMNS, USING GROUP BY IN SUBQUERY使用两个不同列的百分比,在子查询中使用 GROUP BY
【发布时间】:2018-03-24 10:23:04
【问题描述】:
  1. 我已经为它编写了代码,但是没有响应,我正在使用 postgreSQL。

  2. 我想要的最后一件事是找到每天的错误百分比状态(查看有 200 个确定或未找到的状态列)。

    对于 EG-- 2016/07/22 - 1.5% 错误

    P.S 数据库真的很大,有不同的状态和日期,我想要 结果日期明智

  3. 在上面的代码中,我试图找到每天的(未找到状态/总状态)

代码是:-

SELECT status, date(time), round(coun/total) AS percent
FROM log,

(SELECT count(*) AS coun
FROM log 
WHERE status NOT LIKE '200 OK'
GROUP BY date(time) 
ORDER BY date(time)) c, 


(SELECT  count(*) AS total
FROM log GROUP BY  
date(time) 
ORDER BY date(time)) t 


GROUP BY date(time), status, percent
ORDER BY date(time);

我的数据库是这样的... enter image description here

【问题讨论】:

  • 添加一些示例表数据和预期结果 - 作为格式化文本(不是图像)。
  • 您是否加入了隐含联接中的subqueries?我不是postgresql,但你为什么不能把subqueries 放在你的round() 中,或者最好还是把它们放在Select 语句上方的变量中。

标签: sql postgresql subquery percentage


【解决方案1】:
SELECT distinct status, date(time), round(count(1) over (partition by date(time))/count(1) over ()) AS percent, count(1) over (partition by date(time)), count(1) over ()
FROM log

它会给你每天的状态百分比。不仅不是 200,而是全部,这会更有意义,因为您不会在一般查询中对其进行过滤。

如果您仍然需要,也可以在计数之前添加FILTER (where status NOT LIKE '200 OK')

但一般的想法是不要扫描同一张表三次而不加入结果......

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2021-04-10
    • 2013-05-31
    • 1970-01-01
    • 2021-04-05
    • 2019-02-12
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多