如何用SQL/PostgreSQL统计多次完成注册流程的联系人及次数?
需求描述
有如下软件注册流程记录表(假设表名为registration_records):
| Contact | Step |
|---|---|
| Jerry | registration |
| Mike | registration |
| Jerry | complete |
| Karl | registration |
| Richard | registration |
| Richard | complete |
| Jerry | registration |
| Jerry | complete |
| Mike | complete |
| Matthew | registration |
| Matthew | complete |
| Richard | registration |
| Richard | complete |
| Anna | registration |
| Anna | complete |
| Richard | registration |
| Karl | complete |
| Richard | complete |
| Anna | registration |
| Anna | complete |
其中registration表示联系人进入注册流程,complete表示完成注册流程。需要统计完成注册流程超过一次的联系人,以及他们各自的完成次数,预期结果如下:
| Contact | Count |
|---|---|
| Jerry | 2 |
| Anna | 2 |
| Richard | 3 |
请问如何通过SQL/PostgreSQL实现该需求?
实现方案
可以通过分组统计+筛选条件来实现,具体SQL语句如下:
SELECT contact, COUNT(*) AS count FROM registration_records WHERE step = 'complete' -- 仅统计完成注册的记录 GROUP BY contact HAVING COUNT(*) > 1 -- 筛选完成次数超过1次的联系人 ORDER BY count DESC; -- 可选:按完成次数降序排列,匹配示例结果顺序
语句说明
WHERE step = 'complete':先过滤出所有标记为完成注册的记录,排除未完成的流程数据。GROUP BY contact:按联系人维度分组,统计每个联系人的完成记录总数。HAVING COUNT(*) > 1:过滤掉完成次数≤1的联系人,仅保留符合需求的结果。ORDER BY count DESC:可选排序逻辑,让结果按完成次数从多到少展示,和示例输出顺序一致。
内容的提问来源于stack exchange,提问作者user2875230
相关产品推荐
相关产品推荐

