【问题标题】:How to I get a total count?如何获得总计数?
【发布时间】:2018-04-01 12:19:44
【问题描述】:

我当前的查询按预期返回了每个种族的总人数,例如:

Name        |   Count
----------------------
White       |   22
Asian       |   15
Black       |   12

等等。但是我想添加一个第三列,它返回每个种族占总数的百分比,我该怎么做?

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

【问题讨论】:

  • 您使用的是哪个 DBMS? (MySQL 或 SQL Server 或 Oracle 或 ...)
  • 我正在使用 SQL Server
  • 那么戈登的答案应该就是你要找的。​​span>

标签: sql sql-server count percentage


【解决方案1】:

在大多数数据库中,您会使用 ANSI 标准的窗口函数:

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 只是因为有些数据库做整数除法,我们不希望整数除法。

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2019-07-19
    相关资源
    最近更新 更多