SQL Query只查找具有一种产品类型的用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Query只查找具有一种产品类型的用户相关的知识,希望对你有一定的参考价值。

我庄严地发誓,我尽力找到一个现有的问题,我可能不确定如何正确地说出来。

我想为只有一种产品类型配额的用户返回记录。

| user_id | product |
|       1 |     A   |
|       1 |     B   | 
|       1 |     C   | 
|       2 |     B   | 
|       3 |     B   | 
|       3 |     C   | 
|       3 |     D   | 

在上面的例子中,我想要一个只返回仅为一种产品类型带来配额的用户的查询 - 此时哪个产品并不重要。

我尝试使用select user_id, product from table group by 1,2 having count(user) < 2,但这不起作用,select user_id, product from table group by 1,2 having count(*) < 2也没有

任何帮助表示赞赏。

答案

你的having条款很好;这个问题与你的group by有关。试试这个:

select user_id
, count(distinct product) NumberOfProducts 
from table 
group by user_id
having count(distinct product) = 1

或者你可以这样做;这更接近你原来的:

select user_id
from table 
group by user_id 
having count(*) < 2
另一答案

group by子句不能采用序数参数(例如,order by子句可以)。当按照像1这样的值进行分组时,实际上是按字面值1进行分组,这对于表中的任何行都是相同的,因此会将表中的所有行分组到一个组。由于整个表中有多个产品,因此不会返回任何行。

相反,你应该按照user_id进行分组:

SELECT   user_id
FROM     mytable
GROUP BY user_id
HAVING   COUNT(*) = 1
另一答案

如果您需要该产品,请执行以下操作:

select user_id, max(product) as product
from table
group by user_id
having min(product) = max(product);

having条款也可以是:

having count(distinct product) = 1

以上是关于SQL Query只查找具有一种产品类型的用户的主要内容,如果未能解决你的问题,请参考以下文章

BIG QUERY SQL:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?

SQL Query 中用于查找空记录的查询问题

sql查询查找至少有2种帐户的用户

SQL Query 根据特定值填充结果

具有1:n关系的SQL查询,查找具有两个匹配子项匹配的所有实体

sql中有关联的两个表,怎么查出一个表中没有对应到另一个表的数据?