Here is the DDL and DML:
x
create table fb_customers (
customer_id int,
customer_name varchar,
product_bought varchar);
insert into fb_customers values
(1, 'james', 'A'),(2, 'james', 'B'), (3, 'james', 'A'), (4, 'james', 'C'), (5, 'ada', 'A'), (6, 'ada', 'A'), (7, 'Tom', 'B'), (8, 'Leo', 'C');
when I select customer_name
and product_bought
with group by
:
select customer_name, product_bought from fb_customers
group by customer_name, product_bought;
the result is surprisingly not grouped by name automatically – I thought with group by
the result should be grouped by customer_name
and product_bought
but we can see james
is separated and scattered instead of grouped together.
Now I’d like to find the customers who bought both A
and B
, and here is my query:
select customer_name from fb_customers
group by customer_name, product_bought
having sum(case when product_bought = 'A' then 1
when product_bought = 'B' then 1
else 0
end) = 2;
and the result is surprising include ada
who should not be there:
where am I wrong with these two questions? Thanks
Advertisement
Answer
You can try the below – DEMO Here
select customer_name from fb_customers
where product_bought in ('A','B')
group by customer_name
having count(distinct product_bought)=2