Как создать правильный sql запрос
Есть две таблицы нужно составить запросы - Написать запрос, который выводит количество всех продуктов определенного типа.
Написать запрос получение всех продуктов с типом "СЫР" и "МОЛОКО"
Написать запрос, который выводит тип продуктов, которых осталось меньше 10 штук.
Я создал такой запрос для варианта номер 6 -
select s.name, ss.name from product as s join type ss on s.type_id = ss.id where ss.name = 'Молоко' and ss.name = 'Сыр' group by ss.name; но там ошибка
create table type(
id serial primary key,
name varchar(20)
);
create table product (
id serial primary key,
name varchar(20),
expired_date date,
price int,
type_id int references type(id)
);
insert into type(name) values ('Сыр');
insert into type(name) values ('Молоко');
insert into type(name) values ('Творог');
insert into type(name) values ('Мороженное');
insert into product(name, expired_date, price, type_id) values ('Французский', '2021-04-10', 250, 1);
insert into product(name, expired_date, price, type_id) values ('Фермерский', '2021-05-13', 2500, 1);
insert into product(name, expired_date, price, type_id) values ('Плавленный', '2021-06-13', 200, 1);
insert into product(name, expired_date, price, type_id) values ('Домашнее', '2021-04-03', 50, 2);
insert into product(name, expired_date, price, type_id) values ('Пастеризованное', '2021-10-13', 100, 2);
insert into product(name, expired_date, price, type_id) values ('Веселый Молочник', '2021-03-23', 75, 2);
insert into product(name, expired_date, price, type_id) values ('Любительское', '2021-04-03', 60, 2);
insert into product(name, expired_date, price, type_id) values ('Домашний', '2021-03-15', 300, 3);
insert into product(name, expired_date, price, type_id) values ('Бабушкин', '2021-03-17', 320, 3);
insert into product(name, expired_date, price, type_id) values ('Пломбир мороженное', '2021-05-13', 50, 4);
insert into product(name, expired_date, price, type_id) values ('Сникерс мороженное', '2021-04-13', 55, 4);
insert into product(name, expired_date, price, type_id) values ('Просто мороженное', '2021-03-13', 60, 4);
Ответы (1 шт):
Первый запрос:
SELECT * FROM `product` LEFT JOIN `type` on `product`.`type_id` = `type`.`id` WHERE `type`.`name` = 'Сыр' OR `type`.`name` = 'Молоко';
Вы допустили ошибку в выборе типов. у Вас выбираются товары с одновременными типами "Молоко" И "Сыр", чего по факту быть не может (даже потому что связь типа один к одному).
Второй запрос:
SELECT `type`.`name`, COUNT(`product`.`name`) as `count` FROM `type` RIGHT JOIN `product` ON `product`.`type_id` = `type`.`id` GROUP BY `type`.`name` HAVING COUNT(`product`.`name`) < 3
Здесь нужно группировать предметы по типам, а потом через HAVING отсекать лишние данные. Вывел товары, количество которых меньше трёх, чтобы показать, что это будет работать на Ваших предоставленных данных.