簡體   English   中英

SQL計算總和的百分比

[英]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. 獲取“ xyz ..”項目的總小時數:對於這一部分,您以總和(所有值)的形式給出了查詢,我認為這是不對的,因為我們必須將特定於“ xyz”的整個項目的總小時數然后通過計算為之工作的“人們”的工作時間得出百分比。 但是,如果我的假設不正確,請更改下面的第一個查詢以獲取總金額,剩下的應該沒問題。
  2. 獲取每個員工的總工作時間,然后得出百分比

參見以下查詢:

--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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM