当前位置: 首页 > 面试题库 >

如何在BigQuery中将多行汇总为一行?

公西光华
2023-03-14
问题内容

假设您有一个非规范化的架构,其中包含多行,如下所示:

   uuid    |    property    |    value   
------------------------------------------
  abc      |   first_name   |  John
  abc      |   last_name    |  Connor
  abc      |   age          |  26
...

所有行都具有相同的属性集,不一定要排序。 如何创建一个表格,例如使用BigQuery (即没有客户端):

表user_properties:

   uuid    |    first_name  |    last_name   |    age
 --------------------------------------------------------
  abc      |   John         |    Connor      |    26

在传统的SQL中,为此目的使用了“ STUFF”关键字。

如果我至少 可以得到由uuid 排序 的结果 会更容易 这样客户端就不需要加载整个表(4GB)进行排序了-
可以通过顺序扫描具有相同uuid的行来合并每个实体。但是,这样的查询:

SELECT * FROM user_properties ORDER BY uuid;

超出BigQuery中的可用资源(使用allowLargeResults禁止ORDER
BY)。除非我订阅高端计算机,否则似乎几乎无法在BigQuery中对大表(4GB)进行排序。有任何想法吗?


问题答案:
SELECT 
  uuid,
  MAX(IF(property = 'first_name', value, NULL)) AS first_name,
  MAX(IF(property = 'last_name', value, NULL)) AS last_name,
  MAX(IF(property = 'age', value, NULL)) AS age
FROM user_properties
GROUP BY uuid

另一种选择-不涉及GROUP

SELECT uuid, first_name, last_name, age  
FROM (
  SELECT 
    uuid,
    LEAD(value, 1) OVER(PARTITION BY uuid ORDER BY property) AS first_name,
    LEAD(value, 2) OVER(PARTITION BY uuid ORDER BY property) AS last_name,
    value AS age,
    property = 'age' AS anchor
  FROM user_properties
)
HAVING anchor


 类似资料:
  • 问题内容: 在MySQL中,我有两个表: 和 我需要对表(等式7)和表(等式3)中的列求和,并将结果作为总数量。 当我做 我得到了笛卡尔积(20),但是我需要的正确答案是10。如何更改此查询以获得正确的结果? 问题答案:

  • 问题内容: 我有两个表要合并。第一个表与客户一起使用,另一个表与产品一起使用。目前,我有22种产品,但我希望有一个灵活的数据库设计,因此与其在产品数据库中没有22列,我为每个客户为每个产品提供1行,所以如果我总体上添加或删除1种产品,我不会必须更改数据库结构。 我想有一条select语句,在这里我为每个客户端选择所有产品,并且输出应该在一行中,每个产品都有一列。 我看到了其他一些类似的问题,但这样

  • 本文向大家介绍如何在MongoDB中汇总总和以获得总数?,包括了如何在MongoDB中汇总总和以获得总数?的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中汇总总和以获取总计数,可以使用$sum运算符。要了解上述概念,让我们使用文档创建一个集合- 在method的帮助下显示集合中的所有文档。查询如下- 以下是输出- 这是获取总数的查询。 情况1-查询如下- 以下是输出- 这是在Mong

  • 问题内容: 我正在使用SQL Server2008。我具有下表中的数据: 我想以这种格式获取数据: 我怎样才能做到这一点? 问题答案: 使用PIVOT您可以执行以下操作 产生 查看有效的Data.SE示例 在不支持PIVOT的数据库中,您可以改为对表进行多次联接。尽管您可能还是想这样做,但是正如GBN所指出的那样,因为我们没有使用聚合。 查看有效的Data.SE示例

  • 问题内容: 我每天要进行几个实验,在Elasticsearch中存储实验的 错误 和 布尔 值(如果结果正确)。现在,我想在图形中显示结果(使用highchart js)。我使用这样的汇总查询来接收每天的汇总错误,包括标准差: 我面临的问题是,我无法像从数据库中获得双重错误一样检索布尔值。当我只是将字段名称更改为 我收到此错误消息: 但是,可以将所有布尔值合计为true,将true设置为1,将fa

  • 问题内容: 我有一张桌子 但是我希望输出如下(我想使用此输出与其他一些表进行内部联接) 我已经调查过,但不确定如何使用它。 问题答案: 这种转换称为 枢轴 。您没有指定要使用的数据库,但是可以在任何系统中使用带有表达式的聚合函数: 参见带有演示的SQL Fiddle 根据您的数据库,如果您可以同时访问和函数,则可以使用它们来获取结果。该函数将和列转换为行。完成后,您可以使用函数创建四个新列: 请参