BigQuery Standard SQL Group по совокупности нескольких столбцов - PullRequest
1 голос
/ 12 марта 2019

Пример набора данных:

|ownerId|category|aggCategory1|aggCategory2|
--------------------------------------------
|  1    |  dog   |  animal    |   dogs     |
|  1    |  puppy |  animal    |   dogs     |
|  2    |  daisy |  flower    |   ignore   |
|  3    |  rose  |  flower    |   ignore   |
|  4    |  cat   |  animal    |   cats     |
 ...

Хотите создать группу, содержащую количество владельцев из категории, например, aggCategory1, aggCategory2, например:

|# of owners|summaryCategory|
-----------------------------
|    1      |     dog       |
|    1      |     puppy     |
|    1      |     daisy     |
|    1      |     rose      |
|    1      |     cat       |
|    2      |     animal    |
|    2      |     flower    |
|    1      |     dogs      |
|    2      |     ignore    |
|    1      |     cats      |

Не обязательно должен быть этот формат, но для получения указанных выше точек данных.

Спасибо!

Ответы [ 3 ]

1 голос
/ 12 марта 2019

Один метод заключается в использовании union all для отмены вывода данных и последующего агрегирования во внешнем запросе:

SELECT category, COUNT(*)
FROM (SELECT ownerID, category
      FROM t
      UNION ALL
      SELECT ownerID, aggCategory1
      FROM t
      UNION ALL
      SELECT ownerID, aggCategory2
      FROM t
     ) t
GROUP BY category

Чем больше способ записи BigQuery'ish, тем больше массивов:

SELECT cat, COUNT(*)
FROM t CROSS JOIN
     UNNEST(ARRAY[category, aggcategory1, aggcategory2]) cat
GROUP BY cat;
0 голосов
/ 12 марта 2019

использование union all

with cte as
(
    SELECT ownerID, category as summaryCategory
    FROM table
    UNION
    SELECT ownerID, aggCategory1 as summaryCategory
    FROM table
    UNION
    SELECT ownerID, aggCategory2 as summaryCategory
    FROM table
) select count(ownerID),summaryCategory from cte group by summaryCategory
0 голосов
/ 12 марта 2019
SELECT COUNT(T.ownerID), T.category
FROM (
    SELECT ownerID, category
    FROM table
    UNION
    SELECT ownerID, aggCategory1
    FROM table
    UNION
    SELECT ownerID, aggCategory2
    FROM table
) AS T
GROUP BY T.category

С GROUP BY и объединением со всеми столбцами ваших категорий, это может быть хорошо.

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