基础知识 / SQL
SQL:用城市开放数据练习查询分析
SQL 的学习重点不是背语法,而是把业务问题翻译成查询:筛选、分组、关联、排序、窗口分析和结果解释。
学习目标
掌握 SELECT、WHERE、GROUP BY、JOIN、窗口函数和常见城市运营分析查询。
提出问题确定字段筛选范围分组聚合解释结果
筛选
用 WHERE 控制时间、区域、类型和状态,确保统计范围准确。
聚合
用 GROUP BY 统计数量、金额、平均值、中位时间等指标。
关联
用 JOIN 把事实表与区域、部门、建筑、日期维表连接起来。
窗口函数
用于排名、环比、累计、移动平均和组内对比。
案例分析
查询 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 类问题。
- 把日数据汇总成月数据。
- 使用窗口函数计算请求量环比变化。