带有和不带有聚合的 sql 查询
Posted
技术标签:
【中文标题】带有和不带有聚合的 sql 查询【英文标题】:sql queries with and without aggregate 【发布时间】:2020-09-15 16:49:16 【问题描述】:我有 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
);
我想找到不接受每种信用卡交易的不同商家的代码和名称。我想知道一种使用聚合的方法和一种不使用聚合的方法。
提前感谢您的帮助
【问题讨论】:
【参考方案1】:我将其理解为关系划分问题。您希望商家没有针对所有可能的信用卡类型进行交易。
一种选择是使用having子句进行聚合和过滤:
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)
【讨论】:
以上是关于带有和不带有聚合的 sql 查询的主要内容,如果未能解决你的问题,请参考以下文章