Tom*_*man 5 sql google-bigquery
如何编写使直方图图形渲染更容易的查询?
例如,我们有1亿人年龄,我们想绘制0-10,11-20,21-30等年龄的直方图/桶...查询是什么样的?
有人做过吗?您是否尝试将查询结果连接到Google电子表格以绘制直方图?
Mat*_*aus 13
您还可以使用quantiles聚合运算符快速查看年龄分布.
SELECT
quantiles(age, 10)
FROM mytable
Run Code Online (Sandbox Code Playgroud)
此查询的每一行都对应于年龄列表中该点的年龄.第一个结果是通过排序的年龄列表的年龄的十分之一,第二个是年龄的2/10th,3/10等.
使用#standardSQL 和辅助stats查询,我们可以定义直方图应该查看的范围。
这是在 SFO 和 JFK 之间飞行的时间 - 有 10 个桶:
WITH data AS (
SELECT *, ActualElapsedTime datapoint
FROM `fh-bigquery.flights.ontime_201903`
WHERE FlightDate_year = "2018-01-01"
AND Origin = 'SFO' AND Dest = 'JFK'
)
, stats AS (
SELECT min+step*i min, min+step*(i+1)max
FROM (
SELECT max-min diff, min, max, (max-min)/10 step, GENERATE_ARRAY(0, 10, 1) i
FROM (
SELECT MIN(datapoint) min, MAX(datapoint) max
FROM data
)
), UNNEST(i) i
)
SELECT COUNT(*) count, (min+max)/2 avg
FROM data
JOIN stats
ON data.datapoint >= stats.min AND data.datapoint<stats.max
GROUP BY avg
ORDER BY avg
Run Code Online (Sandbox Code Playgroud)
如果您需要整数,请参阅:https : //stackoverflow.com/a/60159876/132438
使用#standardSQL --Fh 查看2019年更新
子查询的想法和“ CASE WHEN”一样有效,然后按以下方式进行分组:
SELECT SUM(field1), bucket
FROM (
SELECT field1, CASE WHEN age >= 0 AND age < 10 THEN 1
WHEN age >= 10 AND age < 20 THEN 2
WHEN age >= 20 AND age < 30 THEN 3
...
ELSE -1 END as bucket
FROM table1)
GROUP BY bucket
Run Code Online (Sandbox Code Playgroud)
或者,如果存储桶是规则的,则可以将它们除并转换为整数:
SELECT SUM(field1), bucket
FROM (
SELECT field1, INTEGER(age / 10) as bucket FROM table1)
GROUP BY bucket
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8624 次 |
| 最近记录: |