...花了几个小时尝试什么不是和研究这个论坛。在这一点上,对于 Google Big Query (GBQ) 对琐碎查询以外的任何事情的有用性相当悲观,但这是最后一次绝望的尝试,也许有人有更好的想法:
假设我们有一个 COUNTRY 表,其中包含每个国家/地区的平均人口体重(以千克为单位)和身高(以米为单位),如下所示:
国家 | 大陆| 重量 | 身高 | ============================================ 美国 | 美国 | 200 | 2.00 | 加拿大 | 美国 | 170 | 1.90 | 法国 | 欧洲 | 160 | 1.78 | 德国 | 欧洲 | 110 | 2.00 |
假设您想挑选并居住在“最小”人的欧洲国家,您将度量“小”定义为体重和身高的加权总和,具有一些恒定的权重,例如体重为 0.6,体重为 0.4身高。
在 Oracle 或 MS SQL 服务器中,这可以通过使用诸如 rank() 和 row_number() 之类的分析窗口函数来优雅而紧凑地完成,例如:
选择国家,combined_score 从(选择 国家 ,( 0.6*rank(weight) over() + 0.4*rank(height) over() ) combined_score 来自国家 其中大陆='欧洲') 按 combine_score 排序
请注意,排名是在大陆过滤之后完成的。大陆过滤器是动态的(比如从网络表单输入),因此无法预先计算排名并提前存储在表格中!
在 GBQ 中没有 rank() 、 row_number() 或 over()。即使你尝试一些“穷人”的黑客攻击,它仍然无法工作,因为 GBQ 不支持相关查询。以下是其他人的类似尝试,但结果非常不令人满意且效率低下:
任何想法如何做到这一点?如果有帮助,我什至可以重组数据以使用嵌套记录。先感谢您!