带有和不带有聚合的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何编写带有联接和聚合的 SQLAlchemy 查询?

带有聚合组件的 sql union

带有聚合的 Django 子查询

带有条件的MongoDB聚合查询

这个带有非聚合列的 cassandra 查询的定义行为是啥?

mongoDB,带有 $sum 和 $count 的 mongoose 聚合查询