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:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?