filter `id` with a specified value in another column and it does not appear more than once on each `id`

43 Views Asked by At

I have table user:

user_id  status
1010      1
1010      3
1010      3
1011      5
1011      2
1011      3
1012      3
1012      3

i want to filter user_id with the condition that the number "3" in the status column cannot appear more than once.

Expected output:

user_id
1011

I tried this query:

select * from (
    select user_id, status, 
    count(status) over (partition by status,user_id) as `sc` 
    from df
    )
    where sc<=1
    order by user_id
2

There are 2 best solutions below

0
forpas On BEST ANSWER

Use aggregation and set the condition in the HAVING clause:

SELECT user_id
FROM df
GROUP BY user_id
HAVING SUM(status = 3) <= 1;
0
nbk On

You can use in MySQL HAVING and a conditional SUM

SELECT `user_id` FROM user GROUP BY user_id HAVING SUM(status=3) <= 1
user_id
1011

fiddle