Sql 显示周和年的百分比
我有这个sql语法,它非常有效。它显示了用于联系我们的来源的数量。我希望数字以100%的百分比显示,而不是计数。如何让我的报表以百分比形式显示计数,请提供数据库帮助 声明: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
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