问题描述
我有4个这样创建的表
CREATE TABLE IF NOT EXISTS customers (
ssn CHAR(11) PRIMARY KEY,first_name VARCHAR(32),last_name VARCHAR(32),country VARCHAR(16)
);
CREATE TABLE IF NOT EXISTS credit_cards (
ssn CHAR(11) REFERENCES customers(ssn),number VARCHAR(20) PRIMARY KEY,type VARCHAR(32)
);
CREATE TABLE IF NOT EXISTS merchants (
code CHAR(10) PRIMARY KEY,name VARCHAR(64),country VARCHAR(16)
);
CREATE TABLE IF NOT EXISTS transactions(
identifier INTEGER PRIMARY KEY,number VARCHAR(20) REFERENCES credit_cards(number),code CHAR(10) REFERENCES merchants(code),datetime TIMESTAMP,amount NUMERIC
);
我想找到没有针对每种信用卡进行交易的不同商人的代码和名称。我想知道一种使用聚合的方法,一种不使用聚合的方法。
预先感谢您的帮助
解决方法
我将其理解为关系划分问题。您希望没有针对每种可能的信用卡类型进行交易的商人。
一种选择是使用hading子句进行聚合和过滤:
select m.*
from merchants m
inner join transactions t on t.code = m.code
inner join credit_cards cc on cc.number = m.number
group by m.code
having count(distinct cc.type) < (select count(distinct type) from credit_cards)