Почему мой CASE WHEN дал мне сообщение об ошибке AGGREGATION? - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь создать промо-группу, используя одно поле 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]

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Ниже для BigQuery Standard 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
0 голосов
/ 14 мая 2019

Думаю, вы намеревались выполнить этот запрос:

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. Если нет, то мы можем легко отредактировать вышеуказанный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...