2017-12-18 2 views
0

私の仕事は、複数の配列の値を要約して私に任せてくれました。このグループからの洞察と援助は非常に高く評価されています。列の配列値を要約する

チャレンジ:

Iは、単一列のBigQueryテーブル内の各行のドメインのTLDの配列を有します。私は各TLDごとにグループ化し、各TLDの合計カウントを新しいテーブルとして返したいと思います。助けを事前に

["biz","us","international","eu","com","co","world","us","international","eu","co","biz"] 
["com","co","world"]   

応答

**TLD_Name** 
biz 2 
us 2 
international 2 
eu 2 
com 2 
co 3 
world 1 

感謝。

答えて

2

配列の列がtlds命名されたとすると、次のような標準のSQLクエリを実行することができます。これは、配列を「平坦化」し、各TLDに関連した数を取得する効果があり

SELECT 
    tld AS TLD_Name, 
    COUNT(*) AS count 
FROM YourTable 
CROSS JOIN UNNEST(tlds) AS tld 
GROUP BY tld; 

を。

+0

非常に役に立ちます。 「平坦化」の説明をありがとう。これは私が失っていた文脈です。 –

1

各行のtld値が高度に反復可能であり、実際に多数の行がある場合は、最初に各行内のtldカウントを結合/集計した後、全体のテーブルレベル(標準SQL)

#standardSQL 
WITH `yourproject.yourdataset.yourtable` AS (
    SELECT ["biz","us","international","eu","com","co","world","us","international","eu","co","biz"] tlds UNION ALL 
    SELECT ["com","co","world","biz"] 
) 
SELECT 
    tld_count.tld AS tld, 
    SUM(tld_count.cnt) AS cnt 
FROM `yourproject.yourdataset.yourtable`, 
UNNEST(ARRAY(SELECT AS STRUCT tld, COUNT(*) AS cnt FROM UNNEST(tlds) AS tld GROUP BY tld)) AS tld_count 
GROUP BY tld 
+0

ありがとうございます。これは、データの再現性が高いため、効率を拡大し最大化するのに役立ちます。 –

+0

あなたが参考になれば - 投票を検討してください:o) –

関連する問題