skip to Main Content

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

Answers


  1. Use aggregation and set the condition in the HAVING clause:

    SELECT user_id
    FROM df
    GROUP BY user_id
    HAVING SUM(status = 3) <= 1;
    
    Login or Signup to reply.
  2. 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

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search