计算计数百分比

Calculate Count as Percentage

我环顾四周,但我似乎无法理解其中的逻辑。我认为 here 是一个很好的回应,但就像我说的那样,它没有意义,因此非常感谢更具体的解释。

所以我想展示每个种族的客户使用信用卡的频率。有不同类型的信用卡,但如果 CardID = 1,则它们使用现金(因此不等于 1 语句)。

我想按种族分组并显示交易数量,但以百分比形式显示。

SELECT Ethnicity, COUNT(distinctCard.TransactionID) AS CardUseCount
FROM (SELECT DISTINCT TransactionID, CustomerID FROM TransactionT WHERE CardID <> 1) 
AS distinctCard INNER JOIN CustomerT ON distinctCard.CustomerID = CustomerT.CustomerID
GROUP BY Ethnicity
ORDER BY COUNT(distinctCard.TransactionID) ASC

例如,这就是它的结果:

Ethnicity | CardUseCount
0         | 100
1         | 200
2         | 300
3         | 400

但我想要这样:

Ethnicity | CardUsePer
0         | 0.1
1         | 0.2
2         | 0.3
3         | 0.4

从你向我发布的示例结果来看,你似乎只想将计数除以 1000,例如

SELECT Ethnicity, 
COUNT(distinctCard.TransactionID) / 1000 AS CardUseCount
FROM <rest part of query>

我认为您发布的答案就是您的答案。正如他们在您的评论中所说,您只需计算交易数,您需要将其除以总交易数。如答案中所述,您需要将 count(...) 除以总数。这将按如下方式完成:

 SELECT Ethnicity, COUNT(distinctCard.TransactionID)/(SELECT COUNT(TransactionT.TransactionID)
                                                      FROM TransactionT WHERE CardID <> 1)
    AS CardUsePercent
FROM (SELECT DISTINCT TransactionID, CustomerID FROM TransactionT WHERE CardID <> 1) 
AS distinctCard INNER JOIN CustomerT ON distinctCard.CustomerID = CustomerT.CustomerID
GROUP BY Ethnicity
ORDER BY COUNT(distinctCard.TransactionID) ASC

这会给你想要的结果。

编辑:这可能是错误的,因为我不知道您的 table 的确切格式,但我假设 TransactionID 字段在 table 中是唯一的。否则使用 DISTINCT 关键字或 table 的 PK,具体取决于您的实际实现

SELECT Ethnicity, COUNT(distinctCard.TransactionID) / (SELECT COUNT(1) FROM TransactionT WHERE CardID <> 1) AS CardUsePer
FROM (SELECT DISTINCT TransactionID, CustomerID FROM TransactionT WHERE CardID <> 1) 
AS distinctCard INNER JOIN CustomerT ON distinctCard.CustomerID = CustomerT.CustomerID
GROUP BY Ethnicity
ORDER BY COUNT(distinctCard.TransactionID) ASC

如果您需要每个种族的卡交易百分比,则必须将每个种族的卡交易除以同一种族的总交易。您不需要子查询:

SELECT Ethnicity, sum(IIF(CardID=1,0,1))/count(1) AS CardUsePercentage
FROM TransactionT     
INNER JOIN CustomerT 
      ON TransactionT.CustomerID = CustomerT.CustomerID
GROUP BY Ethnicity