如何计算 Teradata SQL 中每个客户的平均数量?
How to calculate mean number of something per client in Teradata SQL?
我在 Teradata SQL 中有 table,如下所示:
SMS_ID | CLIENT_ID
-------------------
11 | 123
22 | 123
33 | 123
87 | 456
89 | 456
14 | 888
- “SMS_ID”列显示发送给客户端的 SMS 的 ID
- “CLINET_ID”列显示接收 SMS 的客户端 ID
我的问题是:如何在 Teradata 中计算 SQL 每个客户端的平均 SMS 数量?
如果我计算正确,在我的例子中每个客户的平均 SMS 数量是 2,因为 (3+2+1) / 3 = 2
首先聚合并找到每个客户端的计数,然后子查询并取整个 table 的平均值。
SELECT AVG(cnt)
FROM
(
SELECT COUNT(*) AS cnt
FROM yourTable
GROUP BY CLIENT_ID
) t;
Tim 的查询可以简化为行数除以客户数:
SELECT CAST(COUNT(*) AS FLOAT) / COUNT(DISTINCT CLIENT_ID)
FROM yourTable
哪个效率更高,就看你的实际数据了
我在 Teradata SQL 中有 table,如下所示:
SMS_ID | CLIENT_ID
-------------------
11 | 123
22 | 123
33 | 123
87 | 456
89 | 456
14 | 888
- “SMS_ID”列显示发送给客户端的 SMS 的 ID
- “CLINET_ID”列显示接收 SMS 的客户端 ID
我的问题是:如何在 Teradata 中计算 SQL 每个客户端的平均 SMS 数量?
如果我计算正确,在我的例子中每个客户的平均 SMS 数量是 2,因为 (3+2+1) / 3 = 2
首先聚合并找到每个客户端的计数,然后子查询并取整个 table 的平均值。
SELECT AVG(cnt)
FROM
(
SELECT COUNT(*) AS cnt
FROM yourTable
GROUP BY CLIENT_ID
) t;
Tim 的查询可以简化为行数除以客户数:
SELECT CAST(COUNT(*) AS FLOAT) / COUNT(DISTINCT CLIENT_ID)
FROM yourTable
哪个效率更高,就看你的实际数据了