Apakah ada cara agar saya dapat meratakan tabel di bawah ini sehingga saya dapat mengalikan (num*num_2) sebagai mul dan kemudian saya dapat menjumlahkan(mul) grup dengan id. Jadi saya benar-benar mencari tabel yang mirip dengan gambar kedua yang ditunjukkan di bawah ini.

Existing table

Expected Output

PS: Jika saya tidak bersarang maka hasilnya adalah seperti yang ditunjukkan di bawah ini yang tidak membantu saya dalam apa yang ingin saya capai masukkan deskripsi gambar di sini google-bigquery

1
Harish 16 Januari 2018, 01:12

1 menjawab

Jawaban Terbaik

Di bawah beberapa opsi (BigQuery Standard SQL)

#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
  SELECT 1 id, [STRUCT<num INT64, num_2 INT64>(2013, 2013),(1625, 1625),(1297, 1297),(7634, 7634)] nums UNION ALL
  SELECT 2, [STRUCT<num INT64, num_2 INT64>(1,1),(2,2),(3,3),(4,4),(5,5)]
)
SELECT id, (SELECT SUM(num * num_2) FROM UNNEST(nums) nums ) as mul
FROM `yourproject.yourdataset.yourtable`   

ATAU

#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
  SELECT 1 id, [STRUCT<num INT64, num_2 INT64>(2013, 2013),(1625, 1625),(1297, 1297),(7634, 7634)] nums UNION ALL
  SELECT 2, [STRUCT<num INT64, num_2 INT64>(1,1),(2,2),(3,3),(4,4),(5,5)]
)
SELECT id, SUM(num * num_2) AS mul
FROM `yourproject.yourdataset.yourtable`, UNNEST(nums) nums
GROUP BY id   

Keduanya kembali ke bawah

id  mul  
1   66652959     
2   55   

Jika Anda tidak perlu melakukan SUM(num * num_2) tetapi hanya meratakan tabel Anda - Anda dapat menggunakan contoh di bawah ini

#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
  SELECT 1 id, [STRUCT<num INT64, num_2 INT64>(2013, 2013),(1625, 1625),(1297, 1297),(7634, 7634)] nums UNION ALL
  SELECT 2, [STRUCT<num INT64, num_2 INT64>(1,1),(2,2),(3,3),(4,4),(5,5)]
)
SELECT id, num, num_2
FROM `yourproject.yourdataset.yourtable`, UNNEST(nums) nums  
2
Mikhail Berlyant 15 Januari 2018, 22:27