Postgresql SQL查询不显示任何结果

Postgresql SQL查询不显示任何结果,postgresql,Postgresql,我创建了一个视图名-author\u article\u log,如下所示: 我的工作是获取一天中请求错误的百分比, 我的问题是: select i.date, ((count (case when i.status = '404 NOT FOUND' then 1 else 0 end) * 1.0 / count (case wh

我创建了一个视图名-author\u article\u log,如下所示:



我的工作是获取一天中请求错误的百分比, 我的问题是:

select i.date, 
       ((count (case when i.status = '404 NOT FOUND'
                    then 1
                    else 0
                end)
        * 1.0
        / count (case when i.date = j.date
                      then 1
                      else 0
                 end)
        ) *100
       ) as percentage
from  author_article_log as i, author_article_log as j
group by i.date, j.date
order by percentage desc;

运行此查询既不会返回任何结果也不会返回任何错误,是否有人可以告诉我发生这种情况的原因?

您可以尝试使用
WITH
子句筛选您的请求

WITH errors AS (
  SELECT date, COUNT(*) AS nb_errs
  FROM author_article_log
  WHERE status = '404 NOT FOUND'
  GROUP BY date
), total AS (
  SELECT date, COUNT(*) AS nb_queries
  FROM author_article_log
  GROUP BY date
)
SELECT e.date, 100.0 * e.nb_errs / t.nb_queries AS percentage
FROM errors e
JOIN total t ON e.date = t.date
ORDER BY percentage DESC
文档:

  • 你不需要自我加入
  • 您需要
    sum()
    ,而不是
    count()
    注意:
    count(0)
    等于
    1
  • DATE
    是一个关键字;最好不要将其用作列名


我不确定是否可以在
COUNT
调用中设置
大小写
,但我想说的是
SUM
函数在您的查询中更合适。顺便问一下:
从author\u article\u log as I,author\u article\u log as j
您是否意识到这两个表引用没有以任何方式连接起来,产生一个Carthesian产品?@joop:我在我的查询中添加了一个join语句,看起来像:从author\u article\u log作为j加入author\u article\u log作为j on I.date=j.date,即使它什么也不返回。
WITH errors AS (
  SELECT date, COUNT(*) AS nb_errs
  FROM author_article_log
  WHERE status = '404 NOT FOUND'
  GROUP BY date
), total AS (
  SELECT date, COUNT(*) AS nb_queries
  FROM author_article_log
  GROUP BY date
)
SELECT e.date, 100.0 * e.nb_errs / t.nb_queries AS percentage
FROM errors e
JOIN total t ON e.date = t.date
ORDER BY percentage DESC
SELECT zdate,
       100.0 * SUM (CASE WHEN status = '404 NOT FOUND' THEN 1 ELSE 0 END)
        / COUNT(*) AS percentage
FROM  author_article_log
GROUP BY zdate
ORDER BY percentage DESC
        ;