我郑重发誓我会尽力找到一个现有的问题,也许我不确定如何正确地表达它。
我想为只有一种产品类型具有配额的用户返回记录。
| 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
也不行
感谢您的帮助。
答案 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