Нужно заменить объединение в 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;