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

问题描述 投票:1回答:3

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

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

| 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也没有

任何帮助表示赞赏。

sql count having
3个回答
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

0
投票

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

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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.