我如何获得总数?
How to I get a total count?
我当前查询returns每个族群的总人数符合预期,例如:
Name | Count
----------------------
White | 22
Asian | 15
Black | 12
等但是我想添加第三列,其中 returns 每个族群占总数的百分比,我该如何处理?
SELECT
eo.EthnicOriginName,
ISNULL(e.Number, '')
--CAST(e.Number AS FLOAT) / CAST(COUNT(e.intEthnicOriginID) AS FLOAT) * 100
FROM
tblEthnicOrigin eo
INNER JOIN tblPerson p ON p.intEthnicOriginID = eo.EthnicOriginID
LEFT JOIN (SELECT intEthnicOriginID, COUNT(p.intPersonID) [Number]
FROM tblPerson p
INNER JOIN tblClient c on c.intPersonID = p.intPersonID
GROUP BY intEthnicOriginID) e on e.intEthnicOriginID = eo.EthnicOriginID
GROUP BY
eo.EthnicOriginName, e.Number
在大多数数据库中,您将使用 ANSI 标准 window 函数:
SELECT eo.EthnicOriginName, COUNT(*) as num,
COUNT(*) * 1.0 / SUM(COUNT(*)) OVER () as ratio
FROM tblEthnicOrigin eo INNER JOIN
tblPerson p
ON p.intEthnicOriginID = eo.EthnicOriginID
GROUP BY eo.EthnicOriginName;
* 1.0
只是因为有些数据库做整数除法,我们不要整数除法
我当前查询returns每个族群的总人数符合预期,例如:
Name | Count
----------------------
White | 22
Asian | 15
Black | 12
等但是我想添加第三列,其中 returns 每个族群占总数的百分比,我该如何处理?
SELECT
eo.EthnicOriginName,
ISNULL(e.Number, '')
--CAST(e.Number AS FLOAT) / CAST(COUNT(e.intEthnicOriginID) AS FLOAT) * 100
FROM
tblEthnicOrigin eo
INNER JOIN tblPerson p ON p.intEthnicOriginID = eo.EthnicOriginID
LEFT JOIN (SELECT intEthnicOriginID, COUNT(p.intPersonID) [Number]
FROM tblPerson p
INNER JOIN tblClient c on c.intPersonID = p.intPersonID
GROUP BY intEthnicOriginID) e on e.intEthnicOriginID = eo.EthnicOriginID
GROUP BY
eo.EthnicOriginName, e.Number
在大多数数据库中,您将使用 ANSI 标准 window 函数:
SELECT eo.EthnicOriginName, COUNT(*) as num,
COUNT(*) * 1.0 / SUM(COUNT(*)) OVER () as ratio
FROM tblEthnicOrigin eo INNER JOIN
tblPerson p
ON p.intEthnicOriginID = eo.EthnicOriginID
GROUP BY eo.EthnicOriginName;
* 1.0
只是因为有些数据库做整数除法,我们不要整数除法