如何在 BigQuery 中按外键分组?

     2023-03-25     128

关键词:

【中文标题】如何在 BigQuery 中按外键分组?【英文标题】:How to GROUP BY a foreign key in BigQuery? 【发布时间】:2016-01-15 11:38:20 【问题描述】:

我在 BigQuery 中工作。我有三个表:分支、区域(分支的集合)和按月按分支的支出。

CREATE TABLE region (
    id integer NOT NULL,
    name varchar NOT NULL
);
CREATE TABLE branch (
    id integer NOT NULL,
    name varchar NOT NULL,
    region integer NOT NULL 
);
CREATE TABLE spend (
   branch integer NOT NULL
   amount float,
   month timestamp,
   item_code int
);

我怎样才能得到按月按地区的总支出?

我有这个按月按分行的总支出:

SELECT branch, 
       month, 
       SUM(amount) AS total_amount
FROM [mytable]
GROUP BY branch, 
         month

但我不知道如何按地区分组。我想我需要一个IN 子句?

这也是一个相当大的数据集(spend 表中的 150GB/500m 行),因此大型 JOIN 可能无法工作。

【问题讨论】:

你说你有 3 张桌子,但你从 4:th 中选择... 对不起,应该是FROM spend——只是BQ语法略有不同(FROM [mydataset.spend])。 不管怎样,BQ 擅长连接,尤其是在大表和小/中型表之间(但即使大/大也可以正常工作)。我只是试一试! 【参考方案1】:

大概,你想要一个连接和聚合,我很确定 Bigquery 支持:

SELECT b.region, s.month,  SUM(s.amount) AS total_amount
FROM spend s join
     branch b
     ON s.branch = b.id
GROUP BY b.region, s.month;

【讨论】:

【参考方案2】:
SELECT r.name as region, [month], SUM(total_amount) AS total_amount 
FROM (
  SELECT branch, [month], SUM(amount) AS total_amount
  FROM [mydataset.spend]
  GROUP EACH BY branch, [month]
) AS s
JOIN [mydataset.branch] AS b ON s.branch = b.id
JOIN [mydataset.region] AS r ON b.region = r.id
GROUP BY 1, 2

GROUP EACH BY 和子选择中的预分组在这里用于解决您的问题:large JOINs may not work

【讨论】:

在 admin 中按外键 id 搜索

】在admin中按外键id搜索【英文标题】:Searchbyforeignkeyidinadmin【发布时间】:2012-02-2818:01:49【问题描述】:我正在尝试实现一些看似简单的目标,但在Google和此处都找不到任何答案。我有一个Django模型,非常简单:classShipment(models... 查看详情

需要在 Mongoose 中获取按外键分组的记录列表

】需要在Mongoose中获取按外键分组的记录列表【英文标题】:NeedtogetlistofrecordsgroupedbyforeignkeyinMongoose【发布时间】:2020-01-0218:20:38【问题描述】:我有2个表interestTypes和interests表,兴趣记录存储了interestTypeId引用。现在我需要兴趣... 查看详情

按外键/相关字段分组 django 查询集

】按外键/相关字段分组django查询集【英文标题】:Groupdjangoquerysetbyforeignkey/relatedfield【发布时间】:2014-01-1801:59:58【问题描述】:考虑两个模型:classQuestion(models.Model):...classAnswer(models.Model):question=models.ForeignKey(Question)...目标是按... 查看详情

按外键和日期分组数据,按日期汇总

】按外键和日期分组数据,按日期汇总【英文标题】:Groupdatabyforeignkeyanddatewithtotalbydate【发布时间】:2021-03-0907:15:45【问题描述】:我需要帮助来选择按组织和日期进行的每日付款和分组。按日期分组,然后是付款总数和每天... 查看详情

如何在bigquery中按月/年汇总

】如何在bigquery中按月/年汇总【英文标题】:howtoaggregatebymonth/yearinbigquery【发布时间】:2020-07-3004:16:44【问题描述】:我需要按邮政编码、月、年计算记录和分组。我当前的sql:selectProperty_Zip,count(DistinctListing_Tracking_ID)LISTINGCOUNT,... 查看详情

在 bigquery Standard sql 中按问题分组,并且无法获取唯一记录

】在bigqueryStandardsql中按问题分组,并且无法获取唯一记录【英文标题】:groupbyissueinbigqueryStandardsqlandUnabletogetuniquerecord【发布时间】:2018-03-2706:15:21【问题描述】:通过“错误:SELECT列表表达式引用的列id_coupon既不分组也不聚合... 查看详情

在 BigQuery 中按字母顺序连接列

】在BigQuery中按字母顺序连接列【英文标题】:ConcatenatecolumnsinalphabeticorderinBigQuery【发布时间】:2020-05-1204:17:01【问题描述】:我在BigQuery中有一个表:|c1|c2|c3|----------|a1|\'b\'|c1|----------|a1|\'a\'|c2|----------我想按c1和array_aggc2分组,... 查看详情

如何在bigquery中按月创建分区

】如何在bigquery中按月创建分区【英文标题】:howtocreatepartitiononmonthlybasisinbigquery【发布时间】:2017-08-1013:13:37【问题描述】:我正在尝试使用数据流将数据上传到bigquery分区表中。我已成功按日期上传数据并使用bigquery每月获取... 查看详情

如何在bigquery中按天计算(非)连续记录?

】如何在bigquery中按天计算(非)连续记录?【英文标题】:Howtocount(non)consecutiverecordsbydayinbigquery?【发布时间】:2019-03-2614:26:44【问题描述】:记录设备的每个故障。每个条目都包含一个customer_id、device_id和时间戳:+-------------+-... 查看详情

Django模型按外键过滤

】Django模型按外键过滤【英文标题】:Djangomodelsfilterbyforeignkey【发布时间】:2012-07-1513:30:02【问题描述】:我在从一组模型中过滤对象时遇到了一些问题。问题来了:我有3个课程:classAutor(models.Model):nome=models.CharField(max_length=50)s... 查看详情

Django Forms - 构建一个表单,显示来自多个不同模型的字段,但按外键排序

...key【发布时间】:2012-04-3011:38:33【问题描述】:我不确定如何解决这个问题-我尝试了很多方法,但结果是提交表单后出现“太多值无法解压”错误。这是正在使用的模型的 查看详情

在 MVC4 视图中按类别对订单进行分组

】在MVC4视图中按类别对订单进行分组【英文标题】:GroupingordersbycategoryinMVC4View【发布时间】:2013-11-1110:22:26【问题描述】:在我们的MVC4应用程序中,我的数据库有一个Orders表、一个Products表和一个Category表。每个订单都有一个... 查看详情

Laravel 关系多对多按外键计数相关数据

】Laravel关系多对多按外键计数相关数据【英文标题】:Laravelrelationshipmanytomanycountrelateddatabyforeignkey【发布时间】:2020-06-2505:17:58【问题描述】:我的项目中有3个模型:用户型号代码:<?phpnamespaceApp\\Models;useIlluminate\\Foundation\\Au... 查看详情

Django - 无法按外键 first_name 过滤

】Django-无法按外键first_name过滤【英文标题】:Django-Cannotfilterbyforeignkeyfirst_name【发布时间】:2018-12-2905:15:55【问题描述】:所以目前我正在这样做,您可以通过first_name,last_name,username的一些过滤器搜索参加活动的用户目前的错误... 查看详情

如何在 presto SQL 中按月分组

】如何在prestoSQL中按月分组【英文标题】:HowtogroupbymonthinprestoSQL【发布时间】:2021-12-0505:53:44【问题描述】:我正在尝试在PrestoSQL中按月分组。我试过这个:selectdate_trunc(\'month\',CAST(dateASdate))date_month,sum(gross_revenue,0)AS\'monthly_net_r... 查看详情

如何在 dplyr 中按列索引分组

】如何在dplyr中按列索引分组【英文标题】:howtogroupbyoncolumnindexindplyr【发布时间】:2018-03-0811:08:11【问题描述】:我有一个场景,我在一个变量中获取列索引,我必须按该变量进行分组和汇总col_index<-which(sapply(dataframe,function(x... 查看详情

如何在 Swift 中按数组的元素进行分组

】如何在Swift中按数组的元素进行分组【英文标题】:HowtogroupbytheelementsofanarrayinSwift【发布时间】:2015-09-2201:46:58【问题描述】:假设我有这个代码:classStatvarstatEvents:[StatEvents]=[]structStatEventsvarname:Stringvardate:Stringvarhours:Intvarcurren... 查看详情

如何在 Pandas 数据框中按列值分组

】如何在Pandas数据框中按列值分组【英文标题】:HowtoGroupbycolumnvalueinPandasDataframe【发布时间】:2019-04-1501:11:03【问题描述】:我有这样的熊猫数据框。我想在单独的变量中按App_Name分组App_NameDateResponseGrossRevenuecom.apple.tiles22018-10-1... 查看详情