sql - SQL查询多个选择语句
问题描述
我有一个数据框,其中有很多类似于下图左侧的表格。我将使用 SQL 对其进行查询,以获得类似于下表所示的结果。这样我就可以绘制一个堆积条形图,其中每个条形代表一个状态和严重性计数 S03、S04 的数据将加起来。
+--+-----+--------+
|ID|State|Severity|
+--+-----+--------+
|01| NY | 3 | +-----+---+---+
|02| CA | 4 | |State|S03|S04|
|03| NY | 4 | => +-----+---+---+
|04| CA | 3 | | CA | 1 | 3 |
|05| CA | 4 | | NY | 1 | 1 |
|06| CA | 4 |
我尝试了以下 SQL 查询,但它对 S03 中的每个条目给出相同的结果,对 S04 给出相同的结果。
city_accidents = spark.sql("\
SELECT State, \
(SELECT COUNT(ID) AS Count FROM us_accidents WHERE Severity = 3 ) AS S03, \
(SELECT COUNT(ID) AS Count FROM us_accidents WHERE Severity = 4 ) AS S04 \
FROM accidents \
GROUP BY State \
ORDER BY State DESC LIMIT 10")
city_accidents.show()
+-----+---+---+
|State|S03|S04|
+-----+---+---+
| NY | 1 | 3 |
| CA | 1 | 3 |
这可能是因为我没有为要从中选择状态的内部选择语句输入任何过滤器。有没有办法可以在选择查询中访问这些内部变量?我的意思是如果我可以将内部选择语句更改为(SELECT COUNT(ID) AS Count FROM us_accidents WHERE Severity = 3 AND State = this.State ) AS S03
..
解决方案
SELECT State,
sum(case when Severity = 3 then 1 else 0 end) AS S03,
sum(case when Severity = 4 then 1 else 0 end) AS S04
FROM accidents
GROUP BY State
ORDER BY State DESC
LIMIT 10
推荐阅读
- axios - 从函数参数向 axios http 请求发送数据
- sql - 如何根据两列最大值获取最新记录
- javascript - 由于缺少 http 模块,Electron/Angular 应用程序无法编译
- google-sheets - 使用查询从特定列中选择特定行和行范围
- visual-studio - 当sql server和wcf的主机不同时如何在visual studio中实现服务
- r - 如何在数据框的列上使用 R 的 diff 函数,条件是在不同列中具有特定值
- ios - Swift Firebase iOS didReceiveRemoteNotification 从不调用
- python - 引用框架内的标签
- kubernetes - 从 AWS EKS Autoscaler 工作程序节点中的私有 Docker 注册表中提取映像
- azure - 逻辑应用检查谁阅读了 yammer 帖子