sql - 根据第一次查询的结果将列添加到 SQL 结果
问题描述
我想,我正在为应该是一个简单的查询而苦苦挣扎。
我有两张桌子,单位和活动。我的第一个查询是:
select u.unit, u.group, e.zone
from units u
left join event e
on u.id = e.id
where u.ag_id = 'FIRE' and u.numbr = 'G0182' and u.status > 1
结果是:
Unit | Group | Zone
M1 44G 8
M2 50F 7
然后我运行另一个查询来确定每个组中有多少总单位处于活动状态:
select count(1) from units where group = '[result]' and status > 1
其中 [result] 是第一个查询的组输出(44G、50F 等)
我想在我的第一个查询中添加第 4 列,该查询仅添加该行的总数,如下所示:
Unit | Group | Zone | Active
M1 44G 8 4
M2 50F 7 3
如何链接这些查询以在一个语句中完成所有操作?
谢谢!
解决方案
当您想使 SQL 结果集更宽时,您可以使用 JOIN
select u.unit, u.group, e.zone, x.ctr
from units u
left join event e on u.id = e.id
INNER JOIN(select group , count(*) as ctr from units where status > 1 GROUP BY group) X ON X.group = u.group
where u.ag_id = 'FIRE' and u.numbr = 'G0182' and u.status > 1
在我看来,第一个查询将排除您以后想要计算的项目(由于它的 where 子句)。这意味着您可以根据新需求 ( where status > 1
) 返回源数据,并将它们分组并计算到单独的结果中,然后将其作为子查询放入并加入。
请记住,表可以在查询中出现多次;表只是一个数据块,选择的输出也是如此。SQL Server 将数据块连接到其他数据块,它不关心它是表还是由查询的输出形成的。
使数据块更宽 - JOIN,更高 - UNION,更短 - WHERE,更窄 - SELECT。大多数情况下,SQL 是关于切碎数据块并将它们重新组合在一起以形成不同形状的矩形:D
推荐阅读
- java - Java Spring Kafka:多个侦听器
- django - 管理面板中未调用 Django 自定义用户管理器
- docker - 设置基于 docker 的 InfluxDB/Grafana 网络时出现问题
- r - R:根据条件对分组数据框执行功能
- python - 为什么使用 gif.save 命令会终止 python 中的图形用户界面?
- react-native - React Native SDK 在创建通道时返回错误代码 17,但节点库工作正常
- gmail-api - 将 gmail 网站打开到特定消息
- python - 用 spacy 3 构建一个标注器
- .net - OData API 版本控制问题 .net core 3.1
- visual-studio - 如何禁用 Visual Studio CMake 集成?