【问题标题】:sql queries with and without aggregate带有和不带有聚合的 sql 查询
【发布时间】: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
);

我想找到不接受每种信用卡交易的不同商家的代码和名称。我想知道一种使用聚合的方法和一种不使用聚合的方法。

提前感谢您的帮助

【问题讨论】:

    标签: sql postgresql count having-clause relational-division


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 2022-11-16
      • 2021-08-23
      • 2021-01-11
      相关资源
      最近更新 更多