A query to show a list of customers with only 1 specific product

I am fairly new to writing queries so I am not sure if what I am trying to do is even possible. I want to write a query that gives me a list of customers who only have a savings account and no other products.

This is how the data is saved:

I want the result to show me ONLY Sarah and Shelly

but the best I can come up with shows me Jane, Sarah and Shelly- How do I filter out the Jane results?

SELECT      A.customer_name
FROM        A.Table1
INNER JOIN  B.Table2
ON          A.acct_number = B.acct_number
WHERE       B.account_type = 'savings';

3

You can group by name to get a count of everyone’s accounts, then filter that to people with only one account using having (it’s like where but filters after the grouping).

Then we can also check what type of account they have. Normally you can’t do this with a group by because each group would have multiple rows with different types. But because we’re looking for people with just one row we can use max(type), since there’s only one type per group it will always return just type.

(Most databases also have a way to concatenate all the values in a group, and that might be a better choice than max, but they’re non-standard.)

select name
from customers c
left join accounts a on c.account_num = a.account_num
group by name
having count(*) = 1 and max(type) = 'savings'

Demonstration.

Or you can use an aggregate filter clause to only count their non-savings accounts. Most databases support it, but not MySQL.

select name
from customers c
left join accounts a on c.account_num = a.account_num
group by name
having count(*) filter(where type <> 'savings') = 0

3

I would use conditional aggregation in the HAVING clause and just count any occurences with a type <> savings. If none appear, this customer will be selected.

The “standard” way all RDBMS support is

HAVING COUNT(CASE WHEN type <> 'savings' THEN 1 END) = 0;

More and more RDBMS rather provide a FILTER clause, they are more readable:

HAVING COUNT(*) FILTER(WHERE type <> 'savings') = 0;

MySQL provides the shortest syntax, there you can write SUM(boolean expression):

HAVING SUM(type <> 'savings') = 0;

So the entire query will be:

SELECT 
  c.name
FROM 
  customers c
  LEFT JOIN accounts a --or INNER JOIN, check what you need
    ON c.account_num = a.account_num
GROUP BY 
  c.name
HAVING 
  COUNT(CASE WHEN a.type <> 'savings' THEN 1 END) = 0;
  --replace by FILTER clause if your RDBMS supports it

Here a demo on Postgres which supports both the FILTER and the CASE option.

A different approach, use EXCEPT:

SELECT name FROM customers WHERE type = 'savings'
EXCEPT
SELECT name FROM customers WHERE type <> 'savings'

Will however return a customer having 2 savings accounts (and nothing else).

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật