繁体   English   中英

SQL查询帮助-为每个ID选择非null值(多行)

[英]SQL Query Help - Select non null values for each ID (multiple rows)

我在BigQuery中有一个表格,其中每个ID都有多个行,其中许多行具有Null值。 我想合并行以创建一个完整的集合。

这是一组数据示例:

ID    Address      CreatedDate     City
1    1 1st Street      NULL     New York City
1      NULL          8/18/17      NULL
2      NULL          8/13/17     Boston
2    2 2nd Street    NULL         NULL
3    3 3rd Street    8/1/17      Los Angeles
3     NULL             NULL       NULL
3     NULL           8/7/17       NULL

这是预期的输出:

ID    Address      CreatedDate     City
1    1 1st Street    8/18/17    New York City
2    2 2nd Street    8/13/17     Boston
3    3 3rd Street    8/1/17      Los Angeles

老实说,我不知道这甚至有可能,但任何建议,将不胜感激!

按要唯一的列分组,并使用max()获得包含每个id的结果

select ID, max(Address), max(CreatedDate), max(City)
from your_table
group by ID

聚合是这里的关键。 假设您想要每个组的最大/最小值(如果存在多个)。 查看ID 3上的日期列,这是分钟。

SELECT ID
     , min(address) as Address
     , min(createdDate) as createdDate
     , min(city) as City
FROM table
GROUP BY ID

另一种可能性是,您可以使用BigQuery的Standard SQL版本中提供的功能ARRAY_AGG解决此问题(强烈建议您使用standard)。

至于查询:

#standardSQL
SELECT
  ID,
  ARRAY_AGG(Address IGNORE NULLS LIMIT 1) Address,
  ARRAY_AGG(CreatedDate IGNORE NULLS LIMIT 1) CreatedDate,
  ARRAY_AGG(City IGNORE NULLS LIMIT 1) City
from
  `your_table`
GROUP BY
  ID

您可以使用模拟数据进行测试:

#standardSQL
WITH data AS(
  SELECT 1 ID, '1 1st Street1' Address, NULL CreatedDate, 'New York City' City UNION ALL
  SELECT 1, NULL, '8/18/17', NULL UNION ALL
  SELECT 2, NULL, '8/13/17', 'Boston' UNION ALL
  SELECT 2, '2 2nd Street', NULL, NULL UNION ALL
  SELECT 3, '3 3rd Street', '8/1/17', 'Los Angeles' UNION ALL
  SELECT 3, NULL, NULL, NULL UNION ALL
  SELECT 3, NULL, '8/7/17', NULL
)

SELECT
  ID,
  ARRAY_AGG(Address IGNORE NULLS LIMIT 1) Address,
  ARRAY_AGG(CreatedDate IGNORE NULLS LIMIT 1) CreatedDate,
  ARRAY_AGG(City IGNORE NULLS LIMIT 1) City
from
  data
GROUP BY
  ID
ORDER BY
  ID

您可能会发现,仅在正确使用ARRAY_AGG ,一旦超出资源量的查询将在几秒钟内处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM