基础知识 / SQL

SQL:用城市开放数据练习查询分析

SQL 的学习重点不是背语法,而是把业务问题翻译成查询:筛选、分组、关联、排序、窗口分析和结果解释。

学习目标

掌握 SELECT、WHERE、GROUP BY、JOIN、窗口函数和常见城市运营分析查询。

提出问题确定字段筛选范围分组聚合解释结果
01

筛选

用 WHERE 控制时间、区域、类型和状态,确保统计范围准确。

02

聚合

用 GROUP BY 统计数量、金额、平均值、中位时间等指标。

03

关联

用 JOIN 把事实表与区域、部门、建筑、日期维表连接起来。

04

窗口函数

用于排名、环比、累计、移动平均和组内对比。

案例分析

查询 311 请求中各类问题的月度趋势

以服务请求数据为例,SQL 可以快速回答:哪类问题最多、哪个区域增长最快、处理时长是否改善。

业务问题

业务问题SQL 目标
投诉最多的类型按 complaint_type 分组计数
月度趋势按月份聚合
处理效率计算关闭时长
区域差异按 borough 对比

分析设计

SELECT
  DATE_TRUNC('month', created_date) AS month,
  complaint_type,
  COUNT(*) AS request_count
FROM nyc_311_requests
WHERE created_date >= DATE '2024-01-01'
GROUP BY month, complaint_type
ORDER BY month, request_count DESC;

输出结果

结果字段解释
month统计月份
complaint_type问题类型
request_count当月请求量
排序结果每月高频问题优先显示

动手练习

  • 写一条 SQL 统计每个区域的请求量。
  • 写一条 SQL 找出平均处理时长最长的 10 类问题。
  • 把日数据汇总成月数据。
  • 使用窗口函数计算请求量环比变化。