【问题标题】:Need to replace union in the SQL QuerySQL Query中需要替换union
【发布时间】:2015-05-18 16:24:15
【问题描述】:

我要写一个sql查询

对于每种产品,确定它在 2010 年的购买次数(如果有的话)。 结果应该是(产品名称,num 次)形式的元组。如果一个产品 2010 年根本没有购买,第二个属性的值应该是 0。 不要使用 UNION 运算符。

我已经使用 UNION 编写了查询,但我必须在不使用 UNION 运算符的情况下编写它

SELECT p.product_name , COUNT(p.product_id)
  FROM product p JOIN buys b ON p.product_id = b.product_id
  WHERE b.year = 2010
  GROUP BY p.product_name
UNION
 SELECT p.product_name, 0
  FROM product p JOIN buys b ON p.product_id = b.product_id
  WHERE b.product_id NOT IN (SELECT pr.product_id FROM product pr JOIN buys bu ON pr.product_id = bu.product_id WHERE bu.year = 2010)
  GROUP BY p.product_name;

架构

CREATE TABLE product(
  product_id NUMERIC(10) NOT NULL,
  product_name VARCHAR2(30) NOT NULL,
  product_price NUMERIC(10) NOT NULL,
  product_manufacturer VARCHAR2(30) NOT NULL,
  CONSTRAINT pr_pk PRIMARY KEY(product_id)
  );

CREATE TABLE customer(
  customer_id NUMERIC(10) NOT NULL,
  customer_name VARCHAR2(30) NOT NULL,
  customer_age NUMERIC(10) NOT NULL,
  CONSTRAINT cu_pk PRIMARY KEY(customer_id)
  );

CREATE TABLE buys(
  customer_id NUMERIC(10) NOT NULL,
  product_id NUMERIC(10) NOT NULL,
  month NUMERIC(2) NOT NULL,
  day NUMERIC(2) NOT NULL,
  year NUMERIC(4) NOT NULL,
  CONSTRAINT bu_pk PRIMARY KEY(customer_id, product_id),
  CONSTRAINT bu_fk1 FOREIGN KEY(customer_id) REFERENCES customer(customer_id),
  CONSTRAINT bu_fk2 FOREIGN KEY(product_id) REFERENCES product(product_id)
  );

请帮忙。

编辑 我刚刚做了查询

SELECT p.product_name , COUNT(b.customer_id)
  FROM product p LEFT OUTER JOIN buys b ON p.product_id = b.product_id AND b.year = 2010
  GROUP BY p.product_name;

【问题讨论】:

  • 提示:使用外连接。
  • 谢谢,我刚刚使用了左外连接。
  • 你可以使用 Coalesce(Count(b.customer_id),0)

标签: sql database oracle union


【解决方案1】:

我刚刚做了查询

SELECT p.product_name , COUNT(b.customer_id)
  FROM product p LEFT OUTER JOIN buys b ON p.product_id = b.product_id AND b.year = 2010
  GROUP BY p.product_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2017-09-28
    • 1970-01-01
    • 2017-01-03
    • 2021-12-17
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多