2015-02-20 16 views
8

Próbuję uzyskać różne wartości przy użyciu GROUP_CONCAT w BigQuery.Jak uzyskać różne wartości w GROUP_CONCAT przy użyciu BigQuery Google

będę odtworzyć sytuację stosując prostsze, statyczny przykład:

EDIT: Mam zmodyfikowany przykład do reprezentowania lepszą moją rzeczywistą sytuację: 2 kolumny z GROUP_CONCAT która musi być wyraźna:

SELECT 
    category, 
    GROUP_CONCAT(id) as ids, 
    GROUP_CONCAT(product) as products 
FROM 
(SELECT "a" as category, "1" as id, "car" as product), 
(SELECT "a" as category, "2" as id, "car" as product), 
(SELECT "a" as category, "3" as id, "car" as product), 
(SELECT "b" as category, "4" as id, "car" as product), 
(SELECT "b" as category, "5" as id, "car" as product), 
(SELECT "b" as category, "2" as id, "bike" as product), 
(SELECT "a" as category, "1" as id, "truck" as product), 
GROUP BY 
    category 

tym przykładzie zwraca:

Row category ids products 
1 a 1,2,3,1 car,car,car,truck 
2 b 4,5,6 car,car,bike 

Chciałbym rozebrać wartości zduplikowane znaleziony, aby ret urna jak:

Row category ids products 
1 a 1,2,3 car,truck 
2 b 4,5,6 car,bike 

w MySQL, GROUP_CONCAT posiada odrębną opcję, choć w BigQuery nie ma.

Wszelkie pomysły?

+1

możliwe duplikat [składnia do prowadzenia odrębnej grupy \ _CONCAT w Google BigQuery] (http://stackoverflow.com/questions/28324533/syntax-to-run-a-distinct-group-concat-in-google-bigquery) – Pentium10

+0

Myślę, że jest podobny, ale nie jest dokładnie taki sam, ale dziękuję za wskazanie @ Pentium10 –

Odpowiedz

4

Oto rozwiązanie, które wykorzystuje funkcję agregacji UNIQUE zakres usunąć duplikaty. Zauważ, że w celu korzystania z niego, najpierw musimy zbudować REPEATED korzystając NEST agregacji:

SELECT 
    GROUP_CONCAT(UNIQUE(ids)) WITHIN RECORD, 
    GROUP_CONCAT(UNIQUE(products)) WITHIN RECORD 
FROM (
SELECT 
    category, 
    NEST(id) as ids, 
    NEST(product) as products 
FROM 
(SELECT "a" as category, "1" as id, "car" as product), 
(SELECT "a" as category, "2" as id, "car" as product), 
(SELECT "a" as category, "3" as id, "car" as product), 
(SELECT "b" as category, "4" as id, "car" as product), 
(SELECT "b" as category, "5" as id, "car" as product), 
(SELECT "b" as category, "2" as id, "bike" as product), 
(SELECT "a" as category, "1" as id, "truck" as product), 
GROUP BY 
    category 
) 
+0

Perfect Mosha! Nigdy nie słyszałem o funkcji UNIQUE. Działało bez zarzutu! Dzięki! –

+0

Nie sądzę, że musisz zrobić Everest selekcji podrzędnej – Roman

3

usuwanie duplikatów przed zastosowaniem group_concat będzie osiągnąć wynik chcesz:

SELECT 
     category, 
     GROUP_CONCAT(id) as ids 
    FROM ( 
    SELECT category, id 
    FROM 
    (SELECT "a" as category, "1" as id), 
    (SELECT "a" as category, "2" as id), 
    (SELECT "a" as category, "3" as id), 
    (SELECT "b" as category, "4" as id), 
    (SELECT "b" as category, "5" as id), 
    (SELECT "b" as category, "6" as id), 
    (SELECT "a" as category, "1" as id), 
    GROUP BY 
     category, id 
    ) 
    GROUP BY 
     category 
+0

Dzięki Ahmed, to działa dla jedna kolumna, ale w mojej prawdziwej sytuacji potrzebuję 2 różnych odrębnych kolumn. Zmieniłem to pytanie, aby pokazać problem. –

Powiązane problemy