Есть 2 таблицы. Одна с категориями, другая с товарами.
CREATE TABLE categories
(
id INT NOT NULL auto_increment,
name VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
)
engine=myisam
DEFAULT charset=cp1251
auto_increment=1;
CREATE TABLE products
(
id INT NOT NULL auto_increment,
category_id INT NOT NULL,
price DECIMAL(10, 2) NOT NULL,
name VARCHAR(128) NOT NULL,
description VARCHAR(1024) NOT NULL,
PRIMARY KEY (id)
)
engine=myisam
DEFAULT charset=cp1251
auto_increment=1;
Заполнены таблицы следующими данными:
INSERT INTO categories(name)
VALUES('Холодильники'),('Телевизоры'),('Мобильные телефоны');
INSERT INTO products(category_id, price, name, description)
VALUES
(1, 2910, 'Indesit NBS-20 AA', 'Полезный объем: 341 л; Полезный объем морозилки: 108 л; К-во компрессоров: 1 шт.; Размеры (ВхШхГ): 200 x 60 x 66 см'),
(1, 2223, 'Liebherr T 1404', 'Полезный объем: 122 л; Полезный объем морозилки: 14 лК-во компрессоров: 1 шт.; Размеры (ВхШхГ): 85 x 50.1 x 62 см; Цвет: белый'),
(1, 3490, 'Whirlpool WBE 3114 TS', 'Полезный объем: 307 л; Полезный объем морозилки: 113 л; К-во компрессоров: 1 шт.; Размеры (ВхШхГ): 175 x 59.5 x 64 см; Цвет: нержавеющая сталь');
INSERT INTO products(category_id, price, name, description)
VALUES
(2, 4520, 'Samsung UE-40EH5007', 'Дисплей: 40 ", 1920×1080; Тюнер: аналоговый, цифровой DVB-T, цифровойDVB-C, цифровой DVB-T2; Звук: 20 Вт'),
(2, 2355, 'Philips 22PFL4008T/12', 'Дисплей: 22 ", 1920×1080; Тюнер: аналоговый, цифровой DVB-T, цифровой DVB-C, цифровой DVB-T2; Звук: 8 Вт'),
(2, 3500,'Sony KDL-24W605A Black', 'Дисплей: 24 ", 1366×768; Тюнер: аналоговый, цифровой DVB-T, цифровойDVB-C, цифровой DVB-T2, цифровой DVB-S, цифровой DVB-S2; Звук: 10 Вт'),
(2, 1959, 'Toshiba 22L1333G', 'Дисплей: 22 ", 1920×1080; Тюнер: аналоговый, цифровой DVB-T, цифровой DVB-C; Звук: 5 Вт');
INSERT INTO products(category_id, price, name, description)
VALUES
(3, 541, 'Nokia Asha 206 Black', 'Дисплей: 2.4 '', 240x320, TFT; Камера: 1.2 МП; Память: ПЗУ 64 Mб; Аккумулятор: Li-Ion, 1110 мAч; Корпус: пластик'),
(3, 5165, 'Samsung I9500 Galaxy S 4 Black', 'Дисплей: 5 '', 1920x1080, Super AMOLED; Процессор: Samsung, ядер 8, 1600 МГц; Камера: 13 МП, вспышка, автофокус; Память: ПЗУ 16384 Mб, ОЗУ 2048 Мб; Аккумулятор: Li-Ion, 2600 мAч; Корпус: пластик');
Написать запрос, который выведет таблицу со следующими данными:
- Название категории
- Количество товаров в категории
- Минимальная цена на товар в категории
- Максимальная цена на товар в категории
- Название товара с наиболее длинным описанием в категории
- Наибольшая длина описания в категории
- Текст самого длинного описания в категории
-- 1. Название категории
SELECT name
FROM categories;
-- 2. Количество товаров в категории
SELECT categories.name, COUNT(products.id) as count
FROM categories
LEFT JOIN products
ON products.category_id = categories.id
GROUP BY products.category_id;
-- 3. Минимальная цена на товар в категории
SELECT categories.name, MIN(products.price) as min_price
FROM categories
INNER JOIN products
ON products.category_id = categories.id
GROUP BY products.category_id;
-- 4. Максимальная цена на товар в категории
SELECT categories.name, MAX(products.price) as max_price
FROM categories
INNER JOIN products
ON products.category_id = categories.id
GROUP BY products.category_id;
-- 5. Название товара с наиболее длинным описанием в категории
SELECT c.name, o.name
FROM products o
INNER JOIN categories c
ON o.category_id = c.id
LEFT JOIN products b
ON o.category_id = b.category_id AND LENGTH(o.description) < LENGTH(b.description)
WHERE b.description is NULL;
-- 6. Наибольшая длина описания в категории
SELECT c.name, LENGTH(o.description) as length
FROM products o
INNER JOIN categories c
ON o.category_id = c.id
LEFT JOIN products b
ON o.category_id = b.category_id AND LENGTH(o.description) < LENGTH(b.description)
WHERE b.description is NULL;
-- 7. Текст самого длинного описания в категории
SELECT c.name, o.description
FROM products o
INNER JOIN categories c
ON o.category_id = c.id
LEFT JOIN products b
ON o.category_id = b.category_id AND LENGTH(o.description) < LENGTH(b.description)
WHERE b.description is NULL;