我有一个汇总表如下
user_id service no_of_trx
1 A 56
1 C 43
1 B 22
2 C 10
2 A 3
3 B 45
3 C 7
4 A 77
4 B 63
它总结了 user_id 使用过的所有不同类型的服务,并按每个服务进行的交易数量排序。如何提取每个服务作为顶级服务出现的次数?预期结果
service occurrence_as_max
A 2
B 1
C 1
因为服务 A 是用户 1 和 4 的顶级服务,服务 B 和 C 分别是用户 3 和 2 的顶级服务。
到目前为止我所拥有的:
WITH a as
(SELECT user_id, service, count(service) no_of_trx
FROM transactions
GROUP BY user_id, service
ORDER BY no_of_trx desc),
b as
(SELECT distinct(user_id) user, max(no_of_trx) occurrence_as_max
FROM a
GROUP BY user_id
ORDER by user)
SELECT distinct(service), b.occurrence_as_max
FROM b
LEFT JOIN a ON a.user_id=b.user.
ORDER by b.occurrence_as_max desc;
但这显然行不通。
最佳答案
下面的脚本应该可以工作。这是标准查询语法。您可能需要在 BigQuery 中进行一些调整,但逻辑应该没问题。
SELECT A.service, COUNT(*)
FROM your_table A
INNER JOIN
(
SELECT user_id, MAX(no_of_trx) no_of_trx
FROM your_table
GROUP BY user_id
)B ON A.user_id = B.user_id
AND A.no_of_trx = B.no_of_trx
GROUP BY A.service
关于sql - 如何提取某个值作为 MAX 出现的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56641834/