如何在SQL中实现‘仅属于’条件?统计仅观看alpha系列的用户数
统计仅观看过'alpha'系列的用户数量
首先,你的数据表结构及数据如下:
| Name | series | season |
|---|---|---|
| abc | alpha | s1 |
| abc | alpha | s2 |
| pqr | alpha | s1 |
| xyz | beta | s2 |
| xyz | gamma | s3 |
| abc | theta | s1 |
要统计仅观看过'alpha'、未观看其他任何系列的用户,核心是筛选出所有观看记录里只有'alpha'的用户,以下提供两种常用实现方式:
方法一:分组后筛选唯一系列为alpha
通过GROUP BY Name对用户分组,再用HAVING子句限制该用户的所有系列只能是'alpha':
SELECT COUNT(DISTINCT Name) AS only_alpha_users FROM your_table_name GROUP BY Name HAVING COUNT(DISTINCT series) = 1 AND MAX(series) = 'alpha';
解释:
COUNT(DISTINCT series) = 1:确保该用户只看过一个系列MAX(series) = 'alpha':确保这个唯一的系列是alpha(因为只有一个系列时,MAX和MIN结果一致,用MIN也可)
方法二:排除观看过非alpha系列的用户
先找出所有观看过非alpha系列的用户名单,再从观看过alpha的用户中排除他们:
SELECT COUNT(DISTINCT t1.Name) AS only_alpha_users FROM your_table_name t1 WHERE t1.series = 'alpha' AND t1.Name NOT IN ( SELECT DISTINCT Name FROM your_table_name WHERE series != 'alpha' );
解释:
- 子查询获取所有看过非alpha系列的用户
- 主查询筛选出看过alpha且不在上述名单中的用户,最后统计数量
两种方法都能得到正确结果(示例数据中结果为1,即用户pqr)。
内容的提问来源于stack exchange,提问作者Abhilash Sharma
相关产品推荐
相关产品推荐

