【问题标题】:Calculate Count as Percentage以百分比计算计数
【发布时间】:2023-03-09 16:35:01
【问题描述】:

我环顾四周,但似乎无法理解其中的逻辑。我认为一个好的回复是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

【问题讨论】:

  • 看来您只是在计算交易数量。为了找到一个百分比,您需要获得交易总数并将每个计数除以该百分比。所以: CardUsePer = (CardUseCount / TotalTransactions)
  • 是的,我知道这一点,但我不知道如何编程,因为我知道计算总交易的唯一方法是通过 SELECT,但它已经按种族分组。
  • 在您链接的示例中,子查询用于返回记录总数。尝试类似: COUNT(distinctCard.TransactionID) / (select count(1) from TransactionT where CardID 1) as CardUsePer

标签: sql ms-access count percentage


【解决方案1】:

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

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

【讨论】:

  • 如果这种语法有效(我没有理由相信它无效),那么这就是最好的答案。
【解决方案2】:

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

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

【讨论】:

  • 这仅解决了示例情况,而不是一般情况。
  • @BarnabyMercer,是的,可能是这样,但不确定他的确切数据是什么,但 OP 肯定想将计数除以某个值。
【解决方案3】:
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

【讨论】:

    【解决方案4】:

    我认为您发布的答案就是您的答案。正如他们在您的 cmets 中所说,您只需计算交易量,您需要将其除以总交易量。如答案中所述,您需要将 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
    

    这将给出你想要的结果。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2021-01-10
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多