![](/img/trans.png)
[英]SQL syntax to SUM a Count column for calculating percentage distribution
[英]SQL calculating percentage of sum
我有這張桌子:
現在,我想獲取“ XYZ GmbH”員工從事的項目所花費的時間百分比。
所以我需要通過以下方式獲取完整的花費時間:
SELECT SUM(STDANZ)
FROM MITPRO;
...以及XYZ-GmbH在其項目上花費的時間:
SELECT SUM(mp.STDANZ)
FROM PROJEKT p INNER JOIN MITPRO mp ON (p.PNR = mp.PNR)
INNER JOIN FIRMA f ON (f.FNR = p.FNR)
WHERE f.FNAME='XYZ GmbH';
公式如下:
SUM(STDANZ_of_XYZ) / SUM(TOTAL) * 100
我試過了,但是總是出現錯誤:
SELECT SUM(mp.STDANZ) / (SELECT SUM(STDANZ) FROM MITPRO)
FROM PROJEKT p INNER JOIN MITPRO mp ON (p.PNR = mp.PNR)
INNER JOIN FIRMA f ON (f.FNR = p.FNR)
WHERE f.FNAME='XYZ GmbH';
該錯誤表明它不是單組分組函數。
我該怎么辦?
謝謝朱利安
SELECT AA.FSUM/BB.TSUM FROM
(
SELECT SUM(mp.STDANZ) AS FSUM
FROM PROJEKT p INNER JOIN MITPRO mp ON (p.PNR = mp.PNR)
INNER JOIN FIRMA f ON (f.FNR = p.FNR)
WHERE f.FNAME='XYZ GmbH'
) AA ,
(
SELECT SUM(STDANZ) AS TSUM FROM MITPRO
)BB
在這里,AA和BB是中間臨時表,每個臨時表都包含一個和行。 我們正在對這2個單行表進行CROSS JOIN,這實際上給出了單行。
您想獲得在“ XYZ GmbH”員工從事的項目上花費的時間百分比(這意味着對每個員工而不是對所有員工在一起),這是一種實現方式,有兩個步驟:
參見以下查詢:
--1. Identify the total hours for the project itself (so as to arrive at the percentage); from your question,
-- we need to consider only xyz gmbh project
DECLARE @TOTAL_SUM INT
SET @TOTAL_SUM =
(SELECT
SUM(MI.STDANZ) TOTAL_SUM
FROM
FIRMA F
INNER JOIN PROJEKT P
ON F.FNR = P.FNR
INNER JOIN MITPRO MI
ON MI.PNR = P.PNR
--INNER JOIN MITARBEITER M
--ON M.MNR = MI.MNR
WHERE
F.FNAME = 'XYZ GmbH')t
--2. Identify the total hours for each employee for the xyz gmbh project
SELECT
M.MNR -- Employee id
,M.MName -- Employee name
,SUM(MI.STDANZ) TOTAL_SUM -- Total hours
, (SUM(MI.STDANZ) / @TOTAL_SUM)*100 AS PERCENTAGE --Percentage of hours
FROM
FIRMA F
INNER JOIN PROJEKT P
ON F.FNR = P.FNR
INNER JOIN MITPRO MI
ON MI.PNR = P.PNR
INNER JOIN MITARBEITER M
ON M.MNR = MI.MNR
WHERE
F.FNAME = 'XYZ GmbH'
GROUP BY
M.MNR
,M.MNAME
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.