代码之家  ›  专栏  ›  技术社区  ›  Iren Ramadhan

为什么我的案例给了我一条聚合错误消息?

  •  0
  • Iren Ramadhan  · 技术社区  · 7 年前

    我正试着用它来做一个促销组合 promo_code 在一个月内有可能 customer_ID 将有多个交易,可能有两个不同的促销代码

    SELECT customer_id AS buyer, 
    CASE
    WHEN COUNT(DISTINCT flag_promo) = 2 THEN 'Mixed'
    WHEN COUNT(DISTINCT flag_promo) = 1 AND flag_promo = 1 THEN 'Promo'
    WHEN COUNT(DISTINCT flag_promo) = 1 AND flag_promo = 0 THEN 'Organic'
    END AS promo_group
    FROM TABLE
    WHERE DATE BETWEEN '2019-04-01' AND '2019-04-30'
    GROUP BY 1
    ORDER BY 2
    

    它给了我一个错误信息:

    SELECT list expression references column flag_promo which is neither grouped nor aggregated at [4:41]

    3 回复  |  直到 7 年前
        1
  •  2
  •   Mikhail Berlyant    7 年前

    下面是BigQuery标准SQL

    #standardSQL
    SELECT customer_id AS buyer, 
      CASE 
        WHEN COUNT(DISTINCT flag_promo) > 1 THEN 'Mixed'
        WHEN ANY_VALUE(flag_promo) = 1 THEN 'Promo'
        WHEN ANY_VALUE(flag_promo) = 2 THEN 'Organic'
      END AS promo_group
    FROM `project.dataset.table`
    WHERE DATE BETWEEN '2019-04-01' AND '2019-04-30'
    GROUP BY 1
    ORDER BY 2
    
        2
  •  0
  •   Tim Biegeleisen    7 年前

    这就是我认为你想要做的问题:

    SELECT
        customer_id AS buyer, 
        CASE WHEN COUNT(DISTINCT flag_promo) = 2 THEN 'Mixed'
             WHEN COUNT(DISTINCT flag_promo) = 1 AND MIN(flag_promo) = 1 THEN 'Promo'
             WHEN COUNT(DISTINCT flag_promo) = 1 AND MIN(flag_promo) = 2 THEN 'Organic'
        END AS promo_group
    FROM TABLE
    WHERE
        DATE BETWEEN '2019-04-01' AND '2019-04-30'
    GROUP BY 1
    ORDER BY 2;
    

    这假设 flag_promo 1的值意味着 Promo 价值 2 方法 Organic .如果没有,那么我们可以轻松编辑上述查询。