代码之家  ›  专栏  ›  技术社区  ›  yozhik

在Google大查询中如何将两个值与SQL进行比较?

  •  1
  • yozhik  · 技术社区  · 6 年前

    我试图从Google大查询数据库中获取在不同列中具有相同值的所有记录。比方说,当从手机发送事件时,我正在设置变量 machine_name 去火场 user_properties . 然后我将发送事件 event_notification_send . 当我查询表时,我想从数据库中获取所有名为 事件通知发送 有参数的 机器名称 对于某个值X1,并且该记录必须同时在 用户属性 ,键中 Last_notification 具有相同的值X1。

    我该如何执行SQL查询?

    谢谢。

    以下是我的代码示例:

    #standardSQL
    SELECT *
    FROM 
    `myProject.analytics_159820162.events_*`
    WHERE
    _TABLE_SUFFIX BETWEEN '20180725' AND '20180727' 
    AND event_name in ("event_notification_received", "event_notification_dissmissed")
    AND platform = "ANDROID"
    AND
    (SELECT COUNTIF((key = "machine_name")) 
                  FROM UNNEST(event_params) 
    ) > 0  -- to see if specified event has such key
    AND
    (SELECT COUNTIF((key = "Last_notification")) 
                  FROM UNNEST(user_properties) 
    ) > 0  -- to see if specified event has such key
    ORDER BY event_timestamp ASC
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Mikhail Berlyant    6 年前

    要检查行/事件是否有参数“machine_name”和“Last_notification”的值相同,可以使用下面的语句

    SELECT COUNT(DISTINCT key) cnt
    FROM UNNEST(event_params) 
    WHERE key IN ("machine_name", "Last_notification")
    GROUP BY value
    ORDER BY cnt DESC
    LIMIT 1    
    

    假设您所讨论的查询的其余部分是正确的-下面将添加您的条件

    #standardSQL
    SELECT *
    FROM `myProject.analytics_159820162.events_*`
    WHERE _TABLE_SUFFIX BETWEEN '20180725' AND '20180727' 
    AND event_name IN ("event_notification_received", "event_notification_dissmissed")
    AND platform = "ANDROID"
    AND (
        SELECT COUNT(DISTINCT key) cnt
        FROM UNNEST(event_params) 
        WHERE key IN ("machine_name", "Last_notification")
        GROUP BY value
        ORDER BY cnt DESC
        LIMIT 1
      ) = 2  
    ORDER BY event_timestamp ASC   
    

    注意:下面的用法只是为了安全起见,以防事件有多个参数具有相同的键,但值不同

    ORDER BY cnt DESC
    LIMIT 1