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' 的员工在项目上花费的时间百分比(这意味着每个员工而不是所有员工),这是一种方法,有 2步骤:
- 获取 'xyz..' 项目的总小时数:对于这部分,您将查询作为总和(所有值)给出,我认为这是不正确的,因为我们必须计算整个项目的总小时数具体到 'xyz' 并通过计算为其工作的 'people' 的小时数得出百分比。但是,如果我的假设不正确,请更改下面的第一个查询以获取总和,其余的应该没问题。
- 获取每位员工的总时数并得出百分比
查看以下查询:
--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
我有这个表:
现在我想获得 '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' 的员工在项目上花费的时间百分比(这意味着每个员工而不是所有员工),这是一种方法,有 2步骤:
- 获取 'xyz..' 项目的总小时数:对于这部分,您将查询作为总和(所有值)给出,我认为这是不正确的,因为我们必须计算整个项目的总小时数具体到 'xyz' 并通过计算为其工作的 'people' 的小时数得出百分比。但是,如果我的假设不正确,请更改下面的第一个查询以获取总和,其余的应该没问题。
- 获取每位员工的总时数并得出百分比
查看以下查询:
--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