sql - 如何提取某个值作为 MAX 出现的次数?

标签 sql google-bigquery

我有一个汇总表如下

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/

相关文章:

java - BigQuery,如何以编程方式定义类似字段的数组?

python-2.7 - 为什么我们得到一个 'Client' 对象没有 Google BigQuery 的属性 'get_dataset'?

mysql - 在 mysql 中,我们有 SOUNDEX() 或者我们可以使用 SOUNDS LIKE 来进行相关/错误的拼写或单词匹配,所以它们就像 BIGQUERY 中的任何东西一样

sql - 使用 `REPLACE`函数的Oracle UPDATE语句

java - Openjpa锁不起作用

sql - 如何在SQL中使用 "With"子句创建表

google-analytics - Google BigQuery 为 visiId 和 visitStartTime 返回相同的值

SQL Where IN 与 CASE

php - 使用 PDO 从一条语句在多个表中插入多条记录?

sql - DATE_DIFF 但只计算工作日