计算计数百分比
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
我环顾四周,但我似乎无法理解其中的逻辑。我认为 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