首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在bigquery中按值范围分组

在bigquery中按值范围分组
EN

Stack Overflow用户
提问于 2019-10-21 05:58:33
回答 3查看 3.7K关注 0票数 0

Bigquery中有任何方法可以根据值范围而不是绝对值来分组吗?

我有一个查询,在一个4种不同数字组的产品表中,我要寻找的是一种有效的分组方式,例如:按"A±1000“等进行分组或按"A±10%ofA”分组。

提前谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-21 09:28:12

您可以生成列作为“命名范围”,然后按列分组。作为A+-1000案例的一个例子:

代码语言:javascript
运行
AI代码解释
复制
with data as ( 
select 100 as v union all
select 200 union all
select 2000 union all
select 2100 union all
select 2200 union all
select 4100 union all
select 8000 union all
select 8000
)
select count(v), ARRAY_AGG(v), ranges
FROM data, unnest([0, 2000, 4000, 6000, 8000]) ranges
WHERE data.v >= ranges - 1000 AND data.v < ranges + 1000
GROUP BY ranges

输出:

代码语言:javascript
运行
AI代码解释
复制
+-----+------------------------+--------+
| f0_ |          f1_           | ranges |
+-----+------------------------+--------+
|   2 |          ["100","200"] |      0 |
|   3 | ["2000","2100","2200"] |   2000 |
|   1 |               ["4100"] |   4000 |
|   2 |        ["8000","8000"] |   8000 |
+-----+------------------------+--------+
票数 3
EN

Stack Overflow用户

发布于 2019-10-21 09:58:00

下面的示例用于BigQuery标准SQL

代码语言:javascript
运行
AI代码解释
复制
#standardSQL
WITH `project.dataset.example` AS (
  SELECT * FROM 
  UNNEST([STRUCT<id INT64, price FLOAT64>
    (1, 15), (2, 50), (3, 125), (4, 150), (5, 175), (6, 250)
  ])
)
SELECT 
  CASE
    WHEN price > 0   AND price <= 100 THEN '  0 - 100'
    WHEN price > 100 AND price <= 200 THEN '100 - 200'
    ELSE '200+'
  END AS range_group, 
  COUNT(1) AS cnt 
FROM `project.dataset.example`
GROUP BY range_group
-- ORDER BY range_group

有结果

代码语言:javascript
运行
AI代码解释
复制
Row range_group cnt  
1   0 - 100     2    
2   100 - 200   3    
3   200+        1    

如您所见,在上面的解决方案中,您需要构造CASE语句来反映您的范围--如果您有多个--这可能很无聊--所以下面是更通用(但更详细)的解决方案--它使用了最近引入的桶,桶函数。

代码语言:javascript
运行
AI代码解释
复制
#standardSQL
WITH `project.dataset.example` AS (
  SELECT * FROM 
  UNNEST([STRUCT<id INT64, price FLOAT64>
    (1, 15), (2, 50), (3, 125), (4, 150), (5, 175), (6, 250)
  ])
), ranges AS (
  SELECT [100.0, 200.0] ranges_array
), temp AS (
  SELECT OFFSET, IF(prev_val = val, CONCAT(prev_val, ' - '), CONCAT(prev_val, ' - ', val)) rng FROM (
    SELECT OFFSET, IFNULL(CAST(LAG(val) OVER(ORDER BY OFFSET) AS STRING), '') prev_val, CAST(val AS STRING) AS val
    FROM ranges, UNNEST(ARRAY_CONCAT(ranges_array, [ARRAY_REVERSE(ranges_array)[OFFSET(0)]])) val WITH OFFSET
  )
)
SELECT 
  RANGE_BUCKET(price, ranges_array) range_group, 
  rng, 
  COUNT(1) AS cnt 
FROM `project.dataset.example`, ranges
JOIN temp ON RANGE_BUCKET(price, ranges_array) = OFFSET
GROUP BY range_group, rng
-- ORDER BY range_group

有结果

代码语言:javascript
运行
AI代码解释
复制
Row range_group rng         cnt  
1   0               - 100   2    
2   1           100 - 200   3    
3   2           200 -       1    

如您所见,在第二个解决方案中,您需要在ranges中将您的范围定义为简单数组,将您的边界定义为SELECT [100.0, 200.0] ranges_array

那么temp做所有需要的计算

票数 2
EN

Stack Overflow用户

发布于 2019-10-21 10:14:31

您可以在GROUP BY上执行数学操作,根据任意条件创建组。

例如:

代码语言:javascript
运行
AI代码解释
复制
WITH data AS (
  SELECT repo.name, COUNT(*) price
  FROM `githubarchive.month.201909` 
  GROUP BY 1
  HAVING price>100
)


SELECT FORMAT('range %i-%i', MIN(price), MAX(price)) price_range,  COUNT(*) c
FROM data
GROUP BY CAST(LOG(price) AS INT64)
ORDER BY MIN(price)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58487874

复制
相关文章
使用 Inkwell 生成 LLVM IR
本文中的例子拷贝自:https://pku-minic.github.io/online-doc
谛听
2023/06/13
1.1K0
深度学习中的IR
在深度学习中,IR(Intermediate Representation,中间表示)是一种用于表示深度学习模型的中间形式。它可以用计算图的形式来表示神经网络模型的结构和计算过程。下面将详细介绍深度学习中的IR的作用、特点和常见的表示格式。
叶茂林
2023/07/30
8320
RocketMQ的push消费方式实现的太聪明了
最近仍然畅游在RocketMQ的源码中,这几天刚好翻到了消费者的源码,发现RocketMQ的对于push消费方式的实现简直太聪明了,所以趁着我脑子里还有点印象的时候,赶紧来写一篇文章,来掰扯一下,防止过两天就忘得一干二净了。
三友的java日记
2022/08/10
9420
RocketMQ的push消费方式实现的太聪明了
精彩机械动图:人类真是太聪明了
这一次酷炫动图将把目光转向人造机械的工作原理。 例行警告:图多杀猫,没有连上Wi-Fi的手机党请迅速关闭此页面! 伸出圆手 原理:对于机器人而言,学会如何抓握是件很重要的事情。以往,很多机械手都是类
机器人网
2018/04/23
9240
精彩机械动图:人类真是太聪明了
[Swift] Swift 中的遍历
上一篇曾经说过,2020 年我接触了项目管理、iOS 开发、goLang 开发,所以,后续更新的内容也会逐步丰富起来。
CnPeng
2021/01/18
3.3K0
[Swift] Swift 中的遍历
Swift中的for循环
前言 任何语言中最常用的就是for循环了 但是Swift的for循环语法一直在变 基本遍历 //0到9 for i in (0..<10) { print(i) } //0到10 for i in (0...10) { print(i) } 反向遍历 for i in (0..<10).reversed() { print(i) } 数组遍历 for item in list { print(item) } 数组遍历 获取索引 for (index, element) in
码客说
2019/10/22
5.6K0
Swift 中的 async/await
async-await 是在 WWDC 2021 期间的 Swift 5.5 中的结构化并发变化的一部分。Swift中的并发性意味着允许多段代码同时运行。这是一个非常简化的描述,但它应该让你知道 Swift 中的并发性对你的应用程序的性能是多么重要。有了新的 async 方法和 await 语句,我们可以定义方法来进行异步工作。
韦弦zhy
2022/11/11
3.5K0
Swift 中的 async/await
《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了
本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。
1_bit
2022/01/06
3150
《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了
Swift 中的 Task
Swift 中的 Task 是 WWDC 2021 引入的并发框架的一部分。任务允许我们从非并发方法创建并发环境,使用 async/await 调用方法。
韦弦zhy
2022/11/11
3.4K0
Swift 中的 Task
基辛格发出警告:人工智能太聪明该怎么办?
【新智元导读】如果有一天,机器学会了互相通信,超越人类的认知,这个世界会变成什么样?美国前国务卿亨利·基辛格向人类发出了一个严厉警告:人工智能的进步可能导致一个人类将无法理解的世界 ,而我们应该从现在就开始准备,否则“不久后我们就会发现开始得太晚了”。
新智元
2018/07/31
4120
基辛格发出警告:人工智能太聪明该怎么办?
Swift 中的 AsyncSequence
AsyncSequence是并发性框架和SE-298提案的一部分。它的名字意味着它是一个提供异步、顺序和迭代访问其元素的类型。换句话说:它是我们在Swift中熟悉的常规序列的一个异步变体。
韦弦zhy
2022/11/16
1.4K0
从Pytorch 的ONNX到OpenVINO中IR中间层
ONNX是一种深度学习权重模型的表示格式,ONNX格式可以让AI开发者在不同框架之间相互转换模型,实现调用上的通用性。当前PyTorch*, Caffe2*, Apache MXNet*, Microsoft Cognitive Toolkit* 、百度飞桨都支持ONNX格式。OpenVINO的模型优化器支持把ONNX格式的模型转换IR中间层文件。
OpenCV学堂
2020/08/11
3.7K0
从Pytorch 的ONNX到OpenVINO中IR中间层
Swift中的if let guard
之前是搞java,平常判断都是用的if和else进行判断,这样稍微复杂的逻辑就要嵌套好多层
码客说
2019/10/22
1.7K0
LLVM(2)IR入门
例如上面的%6 = call noundef i32 @_Z9factoriali(i32 noundef 2)函数调用语法,如何找到call的全部使用方法?
mingjie
2023/10/13
3170
LLVM(2)IR入门
Swift中的命名空间
命名空间namespace在C++、C#里面是一个常见概念,Swift中也引入了这样一个机制,下面来探索一下这个命名空间的来龙去脉。
YungFan
2018/12/26
2.3K0
Swift 中的热重载
这一年是2040年,我们最新的 MacBook M30X 处理器可以感知到瞬间编译大型 Swift 项目,听起来很神奇,对吧?除此之外,编译代码库只是我们迭代周期的一部分。包括:
Swift社区
2022/07/05
2K0
Swift 中的热重载
Swift 中的幻象类型
模糊的数据可以说是一般应用程序中最常见的错误和问题的来源之一。虽然 Swift 通过其强大的类型系统和完善的编译器帮助我们避免了许多含糊不清的来源——但只要我们无法在编译时保证某个数据总是符合我们的要求,就总是有风险,我们最终会处于含糊不清或不可预测的状态。
Swift社区
2022/05/19
1.5K0
Swift 中的反射 Mirror
前言 Mirror是Swift中的反射机制,对于C#和Java开发人员来说,应该很熟悉反射这个概念。反射就是可以动态的获取类型以及成员信息,同时也可以在运行时动态的调用方法和属性等。
Swift社区
2021/11/26
5.1K0
Swift 中的反射 Mirror
iOS编译简析
早期 iOS 选用的是当时一家独大的 GCC 编译器作为 OC 语言的前端,但是随着时间的推移,Apple 为 OC 增加了很多特性,想要 GCC 给与实现,但是 GCC 却并没有支持,并且 GCC 本身代码耦合度较高,模块独立性比较差,并且《GCC运行环境豁免条款》限制了LLVM-GCC。这种背景下,Apple 就想找到一个高效、模块化的且开源的替换品,LLVM 进入了苹果的视线。
CoderStar
2022/08/24
1.4K0
iOS编译简析
使用 Swift Package 插件生成代码
不久前,我正在工作中开发一项新服务,该服务由 Swift Package 组成,该 Package 公开了一个类似于Decodable协议,供我们应用程序的其余部分使用。事实上,该协议是从Decodable本身继承下来的,看起来像这样:
Swift社区
2022/12/12
2.3K0
使用 Swift Package 插件生成代码

相似问题

导致错误的变量值: IR生成失败程序太聪明

22

<unknown>:0:错误: IR生成失败:程序太聪明:变量与现有符号OBJC_CLASS_$_UIDevice发生冲突

21

Powershell太聪明了

33

js Date太聪明了

21

gcc太聪明了,不会生成__strcpy_chk

143
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文