BigQuery - Невозможно использовать различное количество с агрегированной областью - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть таблица как

+--------+------------------+-----------+---------+-------------+ 
|visit_id|browsed_categories            | num_seen| num_borrows |
+--------+------------------+-----------+---------+-------------+
|1       |  fiction,history             | 20      | 3           |
|2       |  selfhelp,fiction,science    | 15      | 3           |
|3       |  cooking,kids,home,selfhelp  | 7       | 2           |
+--------+------------------------------+---------+-------------+

, и я пытаюсь обобщить эту таблицу, чтобы выяснить, существует ли корреляция между количеством различных просмотренных категорий и заимствований.

+-------------+---------------------------------+-------------------------+
| borrow_rate | num_distinct_browsed_categories | distinct_categories     | 
+-------------+---------------------------------+-------------------------+
|  0          | 3                               | cooking,selfhelp,home   |
|  1          | 2                               | history,fiction         |
+-------------+---------------------------------+-------------------------+

Мойзапрос выглядит следующим образом:

select
  *,
  count(distinct(split(all_cats, ','))) as num_distinct_browsed_categories
from
(
  select 
    (num_borrows/num_seen) as borrow_rate,
    count(visit_id) as num_visits,
    group_concat(browsed_categories, ',') as all_cats
  from [table]
  group by borrow_rate
)

Запрос дает мне эту ошибку:

Cannot use count distinct with scoped aggregation

Как мне изменить запрос, чтобы получить желаемый результат?

1 Ответ

0 голосов
/ 25 ноября 2018

Ниже приведена версия для BigQuery Standard SQL

#standardSQL
SELECT
  *,
  (SELECT COUNT(DISTINCT cat) FROM UNNEST(SPLIT(all_cats, ',')) cat) AS num_distinct_browsed_categories  
FROM (
  SELECT 
    (num_borrows/num_seen) AS borrow_rate,
    COUNT(visit_id) AS num_visits,
    STRING_AGG(browsed_categories, ',') AS all_cats
  FROM `project.dataset.table`
  GROUP BY borrow_rate
)   

Кстати, если по какой-то причине вы все еще привязаны к BigQuery Legacy SQL - просто замените

count(distinct(split(all_cats, ',')))    

на

exact_count_distinct(split(all_cats, ','))   

в исходном запросе

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