如何创建包含同表双条件计数的关联SQL视图
创建需求视图的SQL实现方案
我来帮你搞定这个统计视图的需求。核心思路是关联Blocks和Schools表,按区块分组后,分别统计每个区块内通电和通水的学校数量。这里用LEFT JOIN可以确保即使某个区块没有学校,也能在结果里显示(对应数量为0);如果只需要统计有学校的区块,换成INNER JOIN即可。
完整的视图创建SQL代码
CREATE VIEW BlockSchoolStats AS SELECT b.BlockName AS '区块名称', SUM(CASE WHEN s.powerAvail = 1 THEN 1 ELSE 0 END) AS '通电学校数量', SUM(CASE WHEN s.waterAvail = 1 THEN 1 ELSE 0 END) AS '通水学校数量' FROM Blocks b LEFT JOIN Schools s ON b.BlockID = s.BlockID GROUP BY b.BlockID, b.BlockName;
代码细节说明
- 表关联逻辑:用
LEFT JOIN关联两张表,以Blocks表为基础,保证所有区块都能被纳入统计,哪怕该区块没有任何学校记录。 - 状态统计:通过
CASE表达式判断每个学校的通电、通水状态,符合条件的标记为1,否则为0,再用SUM函数累加得到每个区块的对应数量(这种写法兼容大部分数据库,比直接SUMBIT类型更通用)。 - 分组规则:按
BlockID和BlockName分组,确保每个区块只会输出一行统计结果。
测试数据对应的预期结果
查询这个视图后,会得到和测试数据匹配的结果:
| 区块名称 | 通电学校数量 | 通水学校数量 |
|---|---|---|
| A | 0 | 1 |
| B | 1 | 2 |
内容的提问来源于stack exchange,提问作者Manik Arora
相关产品推荐
相关产品推荐

