优先考虑具有最小空值的记录...
以下是 BigQuery 标准 SQL(查询#1)
#standardSQL
select
array_agg(t
order by array_length(regexp_extract_all(to_json_string(t), ':null'))
limit 1
)[offset(0)].*
replace(regexp_replace(company, r'(?i)CO LLC', 'CO') as company)
from `project.dataset.table` t
group by company
如果应用于您问题的样本数据 - 输出是

如果您想填写所有记录中的所有字段 - 您可以在下面使用(查询#2)
select regexp_replace(company, r'(?i)CO LLC', 'CO') as company,
max(email) email,
max(phone) phone,
max(website) website,
max(address) address
from `project.dataset.table`
group by company
最后 - 如果您仍然想优先考虑具有最小空值的记录,但其余的空值替换为其他行的值 - 使用下面(查询#3)
select company,
ifnull(email, max_email) email,
ifnull(phone, max_phone) phone,
ifnull(website, max_website) website,
ifnull(address, max_address) address
from (
select array_agg(t
order by array_length(regexp_extract_all(to_json_string(t), ':null'))
limit 1
)[offset(0)].*
replace(regexp_replace(company, r'(?i)CO LLC', 'CO') as company),
max(email) max_email,
max(phone) max_phone,
max(website) max_website,
max(address) max_address
from `project.dataset.table` t
group by company
)
您可以通过将它们应用于以下虚拟数据来测试/检查此选项与上一个选项之间的区别
with `project.dataset.table` as (
select 'Amar CO LLC' company, 'amar@gmail.com' email, 123 phone, NULL website, 'India' address union all
select 'Amar CO', NULL, 222, 'amar.com', NULL union all
select 'Stacks CO LLC', 'stack@gmail.com', NULL, NULL, 'UK' union all
select 'Stacks CO', 'stack@gmil.com', 910, 'stacks.com', 'United Kingdom'
)
最后一个查询(query#3)给出

而先前的(查询#2)只会在所有行中给出最大值
