BigQuery с использованием функции Group By для двух столбцов, порядок не имеет значения - PullRequest
0 голосов
/ 28 января 2020

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

До

 Student  Fruit 1  Fruit 2
 Tom      Apple    Banana
 Tom      Banana   Apple
 Gary     Apple    Banana

После

 Student  Fruit 1  Fruit 2  Count  Repeated Condition 
 Tom      Apple    Banana   2      True
 Gary     Apple    Banana   1      False

Кто-нибудь знает, как этого можно легко добиться в Google BigQuery? Заказ не имеет значения. Я пробовал функции String_AGG и Concat, но порядок имеет значение.

Попытка создать функцию, которая пытается создать вторую таблицу.

Ответы [ 2 ]

2 голосов
/ 28 января 2020

Вы можете использовать LEAST и GREATEST, чтобы отсортировать фрукты в двух столбцах в алфавитном порядке, а затем сгруппировать эти отсортированные значения:

SELECT Student,
       LEAST(Fruit1, Fruit2) AS Fruit1,
       GREATEST(Fruit1, Fruit2) AS Fruit2,
       COUNT(*) AS Count,
       CASE WHEN COUNT(*) > 1 THEN 'True' ELSE 'False' END AS "Repeated Condition"
FROM fruits
GROUP BY Student, LEAST(Fruit1, Fruit2), GREATEST(Fruit1, Fruit2)

Вывод:

student     fruit1  fruit2  count   Repeated Condition
Tom         Apple   Banana  2       True
Gary        Apple   Banana  1       False
1 голос
/ 28 января 2020

Вот один из вариантов, который использует наименьший / наибольший трюк для получения требуемой отчетности:

SELECT
    Student,
    LEAST(fruit1, fruit2) AS fruit1,
    GREATEST(fruit1, fruit2) AS fruit2,
    COUNT(*) AS cnt,
    CASE WHEN LEAST(fruit1) <> GREATEST(fruit1)
         THEN 'True' ELSE 'False' END AS "Repeated Condition"
FROM yourTable
GROUP BY
    Student,
    LEAST(fruit1, fruit2),
    GREATEST(fruit1, fruit2)

Идея состоит в том, чтобы агрегировать по учащемуся вместе с меньшими / большими значениями любой пары два плода. Это приводит (Apple, Banana) в соответствие с (Banana, Apple). Затем мы сообщаем True о повторяющемся условии, если в данной группе учащихся / фруктов мы можем обнаружить, что порядок фруктов никогда не был одинаковым везде. В противном случае мы сообщаем False.

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