Нужно заменить объединение в SQL-запросе

Я должен написать SQL-запрос

Для каждого продукта определите, сколько раз он был куплен в 2010 году, если вообще был. Результатом должны быть кортежи формы (название продукта, количество раз). Если продукт не был куплен вообще в 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;

SCHEMA

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;

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;
Другие вопросы по тегам