Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 显示周和年的百分比_Sql_Postgresql - Fatal编程技术网

Sql 显示周和年的百分比

Sql 显示周和年的百分比,sql,postgresql,Sql,Postgresql,我有这个sql语法,它非常有效。它显示了用于联系我们的来源的数量。我希望数字以100%的百分比显示,而不是计数。如何让我的报表以百分比形式显示计数,请提供数据库帮助 声明: select coalesce(t2.Source, 'Total') as "Source", coalesce(count(case when Week = date_trunc('week', now())::date - 1 then t

我有这个sql语法,它非常有效。它显示了用于联系我们的来源的数量。我希望数字以100%的百分比显示,而不是计数。如何让我的报表以百分比形式显示计数,请提供数据库帮助

声明:

select coalesce(t2.Source, 'Total') as "Source", 
       coalesce(count(case when Week = date_trunc('week', now())::date - 1
                                then t1."Source" end),0) "This Week", 
       coalesce(count(t1.Source),0) "YTD"
from infosys t2 
     left join infocentertracker t1 
               ON t1.Source = t2.Source
               and Week >= DATE '01/01/2017' 
               and Week < DATE '01/01/2018'
               and Project_ID = 'PCR'
group by rollup(t2.Source)

我不确定这是否是最好的方法,但您可以将现有查询用作子查询,使用MAX window函数以百分比形式获得所需的结果

SELECT Source,
ROUND(100.0*"This Week"/ MAX(CASE WHEN Source='Total' THEN "This Week" END) OVER(),0)||'%' AS "This Week",
ROUND(100.0*YTD/ MAX(CASE WHEN Source='Total' THEN YTD END) OVER(),0)||'%' AS YTD
FROM
 (SELECT COALESCE(T2.Source, 'Total') AS "Source",
          COALESCE(COUNT(CASE
                             WHEN WEEK = DATE_TRUNC('week', NOW())::date - 1 THEN T1."Source"
                         END),0) "This Week",
          COALESCE(COUNT(T1.Source),0) "YTD"
  FROM INFOSYS T2
  LEFT JOIN INFOCENTERTRACKER T1 ON T1.Source = T2.Source
  AND WEEK >= DATE '01/01/2017'
  AND WEEK < DATE '01/01/2018'
  AND PROJECT_ID = 'PCR'
  GROUP BY ROLLUP(T2.Source)
  ) X

为什么要使用by rollup?在查询的底部显示总计。这里可能需要一个窗口函数:感谢vkp,这是我尝试t1的第一个select。Source抛出了一个错误,错误:表t1的子句条目中缺少。你知道我该怎么处理这个问题吗?我又编辑了一次。我假设源代码是区分大小写的。请在内部查询中对其进行相应修改,使其与任一表中该列的大小写完全一致。我使用了Source..您在表t2的内部查询中只选择了一个源。也在外部查询中选择的。引用它不需要别名。只需连接一个%。也添加了它。
SELECT Source,
ROUND(100.0*"This Week"/ MAX(CASE WHEN Source='Total' THEN "This Week" END) OVER(),0)||'%' AS "This Week",
ROUND(100.0*YTD/ MAX(CASE WHEN Source='Total' THEN YTD END) OVER(),0)||'%' AS YTD
FROM
 (SELECT COALESCE(T2.Source, 'Total') AS "Source",
          COALESCE(COUNT(CASE
                             WHEN WEEK = DATE_TRUNC('week', NOW())::date - 1 THEN T1."Source"
                         END),0) "This Week",
          COALESCE(COUNT(T1.Source),0) "YTD"
  FROM INFOSYS T2
  LEFT JOIN INFOCENTERTRACKER T1 ON T1.Source = T2.Source
  AND WEEK >= DATE '01/01/2017'
  AND WEEK < DATE '01/01/2018'
  AND PROJECT_ID = 'PCR'
  GROUP BY ROLLUP(T2.Source)
  ) X