第七篇: BigQuery中的复杂SQL查询

BigQuery中的复杂SQL查询

背景与目标

在数据分析中,我们通常需要从多个数据源中获取信息,以便进行深入的分析。这时,BigQuery提供的JOINUNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例,介绍如何使用这些高级SQL操作,并展示具体的使用场景,如从人口统计数据和城市服务请求中获取洞察。


1. JOIN操作:整合多表信息

在多表分析中,JOIN用于合并相关的表数据。例如,假设我们希望查看2000至2010年间美国常见的女性名字及旧金山的311服务请求类型。这个分析可以帮助我们在城市服务和人口统计之间发现潜在的联系。

sql 复制代码
SELECT
  names.name AS popular_name,
  names.year AS year,
  requests.category AS service_request,
  requests.created_date AS request_date
FROM
  `bigquery-public-data.usa_names.usa_1910_current` AS names
JOIN
  `bigquery-public-data.san_francisco.311_service_requests` AS requests
ON
  names.year = EXTRACT(YEAR FROM requests.created_date)
WHERE
  names.gender = "F"
  AND names.year BETWEEN 2000 AND 2010
LIMIT 100;

查询结果示例:

html 复制代码
popular_name	year	service_request
Emma			2008	311 External Request
Abigail			2008	311 External Request
Ava				2008	311 External Request
Sophia			2008	311 External Request
Isabella		2008	311 External Request
...

2. UNION操作:合并多个数据源

UNION操作适用于字段结构相似的多表合并,例如合并不同城市的311服务请求。

sql 复制代码
SELECT 
  "San Francisco" AS city,
  category as request_type,
  created_date as requested_date
FROM
  `bigquery-public-data.san_francisco.311_service_requests`
UNION ALL
SELECT 
  "New York" AS city,
  complaint_type AS request_type,
  created_date AS requested_date
FROM
  `bigquery-public-data.new_york_311.311_service_requests`;`

此查询将旧金山和纽约的311服务请求整合在一个表中,使我们可以在一个表中查看两地的公共服务需求数据。


3. 子查询:嵌套查询实现高级筛选

子查询用于从一个查询的结果中进一步筛选或聚合数据。例如,我们希望在旧金山市2019年最常见的五个服务请求中找到每个请求类型的平均处理时间。

sql 复制代码
SELECT 
  main.category,
  AVG(main.request_duration) AS avg_duration
FROM (
  SELECT 
    category,
    TIMESTAMP_DIFF(closed_date, created_date, MINUTE) AS request_duration
  FROM 
    `bigquery-public-data.san_francisco.311_service_requests`
  WHERE 
    EXTRACT(YEAR FROM created_date) = 2016
) AS main
GROUP BY 
  main.category
ORDER BY 
  avg_duration DESC
LIMIT 5

查询结果示例:

html 复制代码
category								avg_duration
SFHA Requests							696681.24735376
General Request - HUMAN RESOURCES		562258.918918919
General Request - MEDICAL EXAMINER		561643.0
General Request - CONVENTION FACILITIES	546616.0
General Request - STATUS OF WOMEN		532976.0

解释:

  • 内部查询从旧金山的311服务请求数据中提取2016年的请求类型和每个请求的处理时间。
  • 外部查询通过聚合函数AVG计算每种服务类型的平均处理时间,并按时间排序。

总结

BigQuery提供了强大的JOINUNION和子查询操作,帮助我们更灵活地整合和分析多来源数据。这些操作在业务分析和数据仓库管理中非常实用,通过合理应用这些SQL操作,可以有效提高数据分析的深度和效率。

相关推荐
半夏陌离6 小时前
SQL 拓展指南:不同数据库差异对比(MySQL/Oracle/SQL Server 基础区别)
大数据·数据库·sql·mysql·oracle·数据库架构
旋转的油纸伞7 小时前
SQL表一共有几种写入方式
数据库·sql
isyoungboy7 小时前
SQL高效处理海量GPS轨迹数据:人员gps轨迹数据抽稀实战指南
数据库·sql
练小杰8 小时前
【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置
数据库·sql·mysql·adb·配置文件·mysql安装·关系型数据库
Lris-KK9 小时前
【Leetcode】高频SQL基础题--1164.指定日期的产品价格
sql·leetcode
API流转日记9 小时前
Gemini-2.5-Flash-Image-Preview 与 GPT-4o 图像生成能力技术差异解析
人工智能·gpt·ai·chatgpt·ai作画·googlecloud
jnrjian12 小时前
v$lock TS lock id1 用于发现Oracle pdb不能关闭的sid
sql·oracle
l56575814 小时前
第五十四天(SQL注入&数据类型&参数格式&JSON&XML&编码加密&符号闭合&复盘报告)
sql
Mr.Entropy16 小时前
请求超过Spring线程池的最大线程(处理逻辑)
数据库·sql·spring
许泽宇的技术分享17 小时前
Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
sql·架构·.net