【问题标题】:Google big query count谷歌大查询计数
【发布时间】:2017-06-02 10:42:13
【问题描述】:

我正在尝试吸引所有订单少于 4 个的客户 在过去 3 个月内使用 Google BigQuery。

SELECT   a.user_id,   b.refer_by, FROM   water_db.tb_order  a INNER JOIN   
     water_auth.tb_users b ON   a.user_id = b.user_id WHERE   (   SELECT
     user_id   FROM
     water_db.tb_order    GROUP BY
     user_id  HAVING
     COUNT(DISTINCT(a.user_id <= 4)))  AND status = 3  AND DATE(a.order_date) >= 
    '2017-02-15'  AND DATE(a.order_date) <= '2017-05-15';------

【问题讨论】:

  • 欢迎来到 SO。如果您有任何问题,请包括您正在尝试做什么、您尝试过什么以及它的输出等。
  • 你是初学者吗?
  • 是的,我是新手,请帮忙
  • 这里我试图提取过去 90 天内订购少于 4 次的所有客户 ID

标签: sql google-bigquery


【解决方案1】:

我猜每次将一条记录添加到表中时,它都相当于一个订单,但类似于:

SELECT
a.userid, b.refer_by
FROM water_db.tb_order a
INNER JOIN water_auth.tb_users b ON   a.user_id = b.user_id
WHERE 
(COUNT(userid) < 4)
and 
DATE_ADD(MONTH, -4, a.order_date)

日期函数可能会有所不同,因为我不能 100% 确定它在 Google Big Query 中的含义

【讨论】:

    【解决方案2】:

    我认为解决此问题的最佳方法是从 users 表中进行选择,因此您无需删除重复 ID,只需将条件表示为 WHERE 子句的一部分。这应该可以帮助您入门:

    #standardSQL
    SELECT
      user_id,
      refer_by
    FROM water_db.tb_users
    WHERE (
      SELECT COUNT(*)
      FROM water_db.tb_order
      WHERE tb_users.user_id = tb_order.user_id AND
        status = 3 AND
        DATE(order_date) BETWEEN '2017-02-15' AND '2017-05-15'
    ) <= 4;
    

    在此查询中,连接表示为涉及两个表的相关子查询。您可以通过此查询使用示例数据进行尝试:

    #standardSQL
    WITH tb_users AS (
      SELECT 1 AS user_id, 'foo@bar.com' AS refer_by UNION ALL
      SELECT 2, 'a@b.com' UNION ALL
      SELECT 3, 'baz@baz.com'
    ),
    tb_order AS (
      SELECT 1 AS user_id, TIMESTAMP '2017-04-12' AS order_date, 3 AS status UNION ALL
      SELECT 2, TIMESTAMP '2017-05-03', 3 UNION ALL
      SELECT 1, TIMESTAMP '2017-03-13', 3 UNION ALL
      SELECT 1, TIMESTAMP '2017-02-28', 3 UNION ALL
      SELECT 2, TIMESTAMP '2017-05-06', 3 UNION ALL
      SELECT 1, TIMESTAMP '2017-05-01', 3 UNION ALL
      SELECT 1, TIMESTAMP '2017-05-02', 3
    )
    SELECT
      user_id,
      refer_by
    FROM tb_users
    WHERE (
      SELECT COUNT(*)
      FROM tb_order
      WHERE tb_users.user_id = tb_order.user_id AND
        status = 3 AND
        DATE(order_date) BETWEEN
          '2017-02-15' AND '2017-05-15'
    ) <= 4;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多