首页 > 解决方案 > 如何提取值作为 MAX 出现的出现次数?

问题描述

我有一个汇总表如下

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;

但这显然行不通。

标签: sqlgoogle-bigquery

解决方案


以下脚本应该可以工作。这是标准查询语法。您可能需要在 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

推荐阅读