繁体   English   中英

具有两行聚合函数的 SQL

[英]SQL with aggregate function with two rows

我有以下表格:

表定义

我正在处理一个查询,该查询返回在市政 m1 投票的选民人数( idcard号码)。 可以看出,自治市 n1 有两个区:1 和 2,它们有不同的选民。 这是我的代码:

SELECT COUNT(idcard) FROM Census
WHERE ndistrict = (SELECT ndistrict FROM Polling WHERE name='m1')  

但是我有子查询返回两行的问题,所以无法完成计数。 有人可以启发我吗?

这取决于 ndistrict 是否相同或不同

完全相同的

SELECT COUNT(idcard) FROM Census
WHERE ndistrict = (SELECT DISTINCT ndistrict FROM Polling WHERE name='m1')  

如果有多个 ndistrict 使用

SELECT COUNT(idcard) FROM Census
WHERE ndistrict IN (SELECT DISTINCT ndistrict FROM Polling WHERE name='m1') 
SELECT count(*) AS votes
FROM  (SELECT ndistrict FROM polling WHERE name = 'm1') p
JOIN   census USING (ndistrict);

适用于从子查询p返回的任意数量的行。
它假定该子查询中没有重复项(因为ndistrict是根据您的表定义进行polling的 PK),并且idcard被定义为NOT NULL (以便更快的count(*)等效于count(idcard)

它返回投票数,不一定与以下内容相同:

在自治市“m1”投票的选民人数(身份证号码)

如果同一选民可以投多票,则计算不同的选民

SELECT count(DISTINCT idcard) AS voters
FROM  (SELECT ndistrict FROM polling WHERE name = 'm1') p
JOIN   census USING (ndistrict);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM