【问题标题】:Find distinct count of common accounts between products查找产品之间常见帐户的不同计数
【发布时间】:2015-11-05 21:06:25
【问题描述】:

想象一个有两列的表格,如下所示:

Account_ID (integer)
Product_ID (integer)

其他列不重要。这列出了帐户购买的产品。我想创建一个包含三列的输出,如下所示:

Account_ID_1 | Account_ID_2 | Count(distinct product_ID)

结果应包含 Account_ID 的所有值以及每个 Account_Id 组合中常见 Product_Id 的相关不同计数。

我正在使用Google BigQuery。是否有执行此操作的 SQL 方法,或者我应该计划用完整的编程语言对其进行编码?

【问题讨论】:

  • 我不知道Google bigquery,但是看看CROSS JOIN
  • 所以如果两个账户有相同的product_idcount() 是1,如果只有一个账户有0?还是与 account1 不同 + 与 account2 不同?
  • 你想要计数为 0 吗?

标签: sql distinct combinations google-bigquery


【解决方案1】:

这对我有用:

select
   t1.Account_ID, T2.Account_ID, count(t1.Product_ID) count_product_id 
from
   MYTABLE t1 join MYTABLE t2 on t1.Product_ID = t2.Product_ID
where t1.Account_ID <> t2.Account_ID
group by t1.Account_ID, t2.Account_ID
order by 1,2

【讨论】:

  • 应该是:其中 t1.Account_ID
  • 同意。 “”会给你一行账户 A 和 B,另一行账户 B 和 A。在这种情况下没有意义,因为计数是相同的。 “
【解决方案2】:

在这里我计算两个帐户共有多少产品。

SELECT 
     T1.Account_ID as Account_ID_1,
     T2.Account_ID as Account_ID_2,
     COUNT(distinct T1.product_id) 

From YourTable as T1
JOIN YourTable as T2
  ON T1.Account_ID <  T2.Account_ID
 AND T1.product_ID =  T2.product_ID 
GROUP BY
     T1.Account_ID,
     T2.Account_ID

【讨论】:

    【解决方案3】:

    BigQuery 版本:

    (仅在相等时加入,同时将

    SELECT a.corpus, b.corpus, EXACT_COUNT_DISTINCT(a.word) c
    FROM
    (SELECT corpus, word FROM [publicdata:samples.shakespeare]) a
    JOIN
    (SELECT corpus, word FROM [publicdata:samples.shakespeare]) b
    ON a.word=b.word
    WHERE a.corpus>b.corpus
    GROUP BY 1, 2
    ORDER BY 4 DESC
    

    【讨论】:

    • 这正是我需要的查询!非常感谢。该查询适用于 samples.shakespeare,但我的表似乎对它来说太大了。错误提示:Shuffle 已达到表 __I0 的广播限制(至少广播 151001878 字节)。考虑使用分区连接而不是广播连接。有什么想法吗?
    • 每个人都加入(如果这是对你有用的答案,你为什么要接受另一个?)
    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多