【发布时间】:2021-08-31 21:28:13
【问题描述】:
我只有SQL 的基本知识,这是我第一次使用标签 SQL,所以如果我在第一个实例中遗漏了什么,请原谅我。有一个大型数据库,其中一个特别感兴趣的表包含超过 1 亿行。客户端正在使用PostgreSQL 作为数据库。
这个表的结构是这样的(示例数据)表名说table
biometric_token ID status State_code
1 ABCD 1 A 1
2 ABCD 2 R 2
3 ABCD 3 A 2
4 BCDE 4 A 1
5 DEFG 5 A 2
6 DEFG 6 A 2
7 DEFG 7 A 3
8 FGHI 8 A 4
- 列
biometric_token是基于生物特征的ID,我可以放心地假设每个人都是独一无二的,他/她不能伪造它。不用说,此令牌是在其他三列所属的注册过程结束时收集的。 -
ID是系统生成的唯一 ID,每个人在接近注册时都会获得该 ID。 -
status是approved - A或rejected - R。 -
State_code是个人注册所在州/县的代码。
我需要找出有多少(仅计数)个人(即具有相同 biometric_token)已多次注册。所以输出格式类似于
count_of_individuals number_of_times
1 1 3
2 1 2
解释
-
ABCD注册成功2次 -
DEFG注册成功3次
下面给出了我尝试过的代码(嵌套查询),它可以工作但速度很慢。我需要查找是否有更快的替代方法可以从这个庞大的数据库中成功检索此摘要
SELECT COUNT( DISTINCT biometric_token) AS count_of_individuals, cnt AS number_of_times
FROM
(SELECT biometric_token, count (ID) AS cnt
FROM table
WHERE status IN ('A')
GROUP BY biometric_token
HAVING cnt > 1)
GROUP BY number_of_times
【问题讨论】:
标签: sql postgresql aggregation