[英]How to calculate the Final Total sum and calculate percentages
在下面的查詢中,我具有每種語言的學生說的第一語言的總數
CTE
WITH Lang AS
(
SELECT
language,
studentcount,
SUM(Studentcount) AS total
FROM
(SELECT
l.longtext AS language,
COUNT(distinct s.studentnr) AS Studentcount
FROM
student s
JOIN
pupil p on p.id = s.pupilid
JOIN
pupillanguage pl on pl.personid = p.id
JOIN
language l on l.id = pl.languageid
GROUP BY
l.longtext
ORDER BY
Studentcount DESC
) t
GROUP BY
language, Studentcount
)
詢問
SELECT initcap(language), Studentcount, total
FROM Lang
UNION ALL
SELECT cast(count(language) as varchar(6)) ||' Languages', null, null
FROM Lang
現在我有1個主要問題,這是分配學生的TOTAL SUM值。 我需要這個,所以我可以計算出一列中學生人數/總學生人數的百分比 。 但是,很明顯,我的總價值沒有滿足我的需求。
輸出量
languages students total
------------------------------
French 734 734
Afrikaans 93 93
Greek 117 117
German 55 55
Armenian 160 160
Malaysian 5 5
Danish 15 15
American 5 5
Swedish 24 24
Bulgarian 1043 1043
預期產量:
languages students Percentage
-----------------------------------
French 734 24,46
Afrikaans 93 3,12
Greek 117 3,9
German 55 1,83
Armenian 160 5,33
Malaysian 5 0,16
Danish 15 0,5
American 5 0,16
Swedish 24 0,8
Bulgarian 1043 34,76
如何計算最終的總和作為一個數值來計算百分比
您可以使用窗口函數( https://www.postgresql.org/docs/current/static/tutorial-window.html ):
SELECT
language,
students,
SUM(students) OVER () as total,
students::decimal / SUM(students) OVER () * 100 as percentage
FROM
--- <YOUR QUERY>
窗口函數SUM(students) OVER ()
匯總了學生列的所有值,因為在OVER
子句中沒有給出限制幀
::decimal
強制轉換對於獲得浮點除法(100/200 = 0.5)而不是整數除法(100/200 = 0)是必需的。
你可以嘗試如下
with t1 as (
SELECT l.longtext as language,
count(distinct s.studentnr) as Studentcount
FROM student s
join pupil p on p.id = s.pupilid
join pupillanguage pl on pl.personid = p.id
join language l on l.id = pl.languageid
group by l.longtext
order by Studentcount desc
) select language,Studentcount, sum(Studentcount) over() as total,
(Studentcount::float/sum(Studentcount) over())*100 as percentage
from t1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.