我想在 Table:1 中的 unnest 陣列之后加入表,但由于 unnest,記錄在加入后重復。
表格1
| a | d.b | d.c |
-----------------
| 1 | 5 | 2 |
- -------------
| | 3 | 1 |
-----------------
| 2 | 2 | 1 |
表:2
| a | c | f |
-----------------
| 1 | 12 | 13 |
-----------------
| 2 | 14 | 15 |
我想加入表 1 和表 2,a但我還需要輸出:
| a | d.b | d.c | f | h | Sum(count(a))
---------------------------------------------
| 1 | 5 | 2 | 13 | 12 |
- ------------- - - 1
| | 3 | 1 | | |
---------------------------------------------
| 2 | 2 | 1 | 15 | 14 | 1
a可以在表 2 中重復,因為我需要計算(a)然后在加入后選擇總和。
我的問題是當我加入時我需要嵌套和重復的記錄與第一個表中的記錄相同但是當使用聚合來獲取總和時我不能按結構或陣列分組所以我UNNEST先記錄然后使用ARRAY_AGG函式但是總和也有問題。
SELECT
t1.a,
t2.f,
t2.h,
ARRAY_AGG(DISTINCT(t1.db)) as db,
ARRAY_AGG(DISTINCT(t1.dc)) as dc,
SUM(t2.total) AS total
FROM (
SELECT
a,
d.b as db,
d.c as dc
FROM
`table1`,
UNNEST(d) AS d,
) AS t1
LEFT JOIN (
SELECT
a,
f,
h,
COUNT(*) AS total,
FROM
`table2`
GROUP BY
a,f,h) AS t2
ON
t1.a = t2.a
GROUP BY
1,
2,
3
注意:錯誤是在總和之后的總數遠遠高于預期所有其他資料都是正確的。
uj5u.com熱心網友回復:
我猜你的表 2 包含不是唯一的列a。
讓我們假設表 2 如下所示:
| 一個 | C | F |
|---|---|---|
| 1個 | 12 | 13 |
| 2個 | 14 | 15 |
| 1個 | 100 | 101 |
有兩行,其中ais 1。由于b和f不同,分組不解決此 ( GROUP BY a,f,h) AS t2) 并且counts(*) as total是每一行一個。
| 一個 | C | F | 全部的 |
|---|---|---|---|
| 1個 | 12 | 13 | 1個 |
| 2個 | 14 | 15 | 1個 |
| 1個 | 100 | 101 | 1個 |
在下一步中,您將此表連接到表 1。表 1 中具有1列值的行a是重復的,因為表 2 有兩個條目。這導致總和太高。
我建議采用以下方法,而不是取消嵌套表格:
-- Creating of sample data as given:
with tbl_A as (select 1 a, [struct(5 as b,2 as c),struct(3,1)] d union all select 2,[struct(2,1)] union all select null,[struct(50,51)]),
tbl_B as (select 1 as a,12 b, 13 f union all select 2,14,15 union all select 1,100,101 union all select null,500,501)
-- Query:
select *
from tbl_A A
left join
(Select a,array_agg(struct(b,f)) as B, count(1) as counts from tbl_B group by 1) B
on ifnull(A.a,-9)=ifnull(B.a,-9)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534874.html
標籤:Google Cloud Collective 数据库加入谷歌大查询聚合函数
上一篇:將數字串列作為字串轉換為單個整數
