SQL技术问询:统计所有登记年份最爱节目始终一致的人员总数
解决思路与SQL实现
嘿,我来帮你搞定这个统计问题!你之前尝试嵌套查询没成功,大概率是没抓准核心逻辑——我们要找的是那些所有登记记录里最爱节目完全没换过的人对吧?
核心思路其实很简单:只要一个人所有登记记录里的最爱节目只有1种,那他就符合条件。基于这个思路,我们可以用两层查询来实现:
具体SQL代码
假设你的表名叫person_favorite_shows,字段分别是person_id(人员ID)、register_year(登记年份)、favorite_show(最爱节目),那可以这么写:
SELECT COUNT(DISTINCT person_id) AS consistent_people_total FROM ( -- 内层子查询:统计每个人的不同最爱节目数量 SELECT person_id FROM person_favorite_shows GROUP BY person_id -- 筛选出只有1种最爱节目的人 HAVING COUNT(DISTINCT favorite_show) = 1 ) AS consistent_people;
逻辑拆解
- 内层子查询:按
person_id分组,用COUNT(DISTINCT favorite_show)统计每个人有多少种不同的最爱节目,再通过HAVING筛选出数量为1的人——这部分就是所有登记年份里最爱节目始终一致的人。 - 外层查询:统计这些符合条件的人员总数,用
COUNT(DISTINCT person_id)是为了避免极端情况下的重复计数(虽然内层已经分组,但多一层保障更稳妥)。
可选调整
如果你的需求里想排除只有1次登记记录的人(比如只统计至少有2年登记且节目没换的人),可以在内层的HAVING里再加一个条件:
HAVING COUNT(DISTINCT favorite_show) = 1 AND COUNT(register_year) >= 2
这样就可以精准筛选出有多次登记但节目始终没变的人啦!
内容的提问来源于stack exchange,提问作者zim68
相关产品推荐
相关产品推荐

