2015-02-20 22 views
8

BigQuery'de GROUP_CONCAT kullanırken farklı değerler almaya çalışıyorum.Google Big Query'yi kullanarak GROUP_CONCAT üzerinde farklı değerler nasıl alınır

Ben daha basit, statik örneği kullanarak durumu yeniden oluştururuz:

DÜZENLEME: group_concat ile 2 sütun farklı olmalıdır:

daha iyi benim gerçek durumu temsil etmek örnek modifiye ettim
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 

Bu örnek verir:

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

ben ret etmek, bulunan yinelenen değerleri şerit istiyorum urn gibi: MySQL

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

, GROUP_CONCAT değer bir alternatif vardır, ama BigQuery'de yoktur.

Herhangi bir fikrin var mı? İstediğiniz sonucu elde edecek group_concat uygulamadan önce

+1

([Google BigQuery'deki ayrı GRUP \ _CONCAT çalıştırmak için sözdizimi] olası yinelenen http://stackoverflow.com: Sipariş kullanmak için, önce bir REPEATED kullanılarak NEST toplanmasına inşa etmek gerektiğini, unutmayın/questions/28324533/syntax-to-run-a-distinct-grup-concat-in-google-bigquery) – Pentium10

+0

Bence benzer ama aynı değil, ama işaret etmek için teşekkür ederiz @ Pentium10 –

cevap

4
İşte

olan çözüm.

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

Mükemmel Mosha! UNIQUE işlevini hiç duymadım. Kusursuz çalıştı! Teşekkürler! –

+0

NEST'in NEST alt seçimlerini yapmanız gerektiğini düşünmüyorum – Roman

3

Çıkarma çiftleri: çiftleri kaldırmak UNIQUE kapsamı toplama işlevini kullanır

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

Teşekkürler Ahmed, bunun için çalışıyor tek bir sütun, ama gerçek durumumda 2 farklı ayrı sütuna ihtiyacım var. Sorunu göstermek için soruyu düzenledim. –

İlgili konular