SQL查询查找仅具有一种产品类型的用户

时间:2018-09-12 19:01:34

标签: sql count having

我郑重发誓我会尽力找到一个现有的问题,也许我不确定如何正确地表达它。

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

| 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也不行

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您的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

答案 1 :(得分:0)

group by子句不能接受序数参数(例如order by子句可以)。当按1之类的值分组时,实际上是按文字值1分组,该值对于表中的任何行都是相同的,因此将 all < / strong>表中的行归为一组。由于整个表中有多个产品,因此不会返回任何行。

相反,您应该按user_id分组:

SELECT   user_id
FROM     mytable
GROUP BY user_id
HAVING   COUNT(*) = 1

答案 2 :(得分:0)

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

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

having子句也可以是:

having count(distinct product) = 1