Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Помогите в освоении SQL, не могу решить учебную задачу (http://forum.oszone.net/showthread.php?t=189851)

evg64 30-10-2010 20:56 1531212

Помогите в освоении SQL, не могу решить учебную задачу
 
Добрый день!
Задача такая:
читать дальше »
Цитата:

Для каждой группы блокнотов с одинаковым номером модели добавить запись в таблицу PC со следующими характеристиками:
код: минимальный код блокнота в группе +20;
модель: номер модели блокнота +1000;
скорость: максимальная скорость блокнота в группе;
ram: максимальный объем ram блокнота в группе *2;
hd: максимальный объем hd блокнота в группе *2;
cd: значение по умолчанию;
цена: максимальная цена блокнота в группе, уменьшенная в 1,5 раза


Краткая информация о базе данных "Компьютерная фирма":
читать дальше »
Цитата:

Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, screen, price)
Printer(code, model, color, type, price)
Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' - ПК, 'Laptop' - ПК-блокнот или 'Printer' - принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость - speed (процессора в мегагерцах), объем памяти - ram (в мегабайтах), размер диска - hd (в гигабайтах), скорость считывающего устройства - cd (например, '4x') и цена - price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным - color ('y', если цветной), тип принтера - type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена - price.

Никак не могу решить, уже долго над ней сижу. Пробовал гуглить. Помогите плз. По идее, задача одна из первых, так что она не должна быть очень сложной, но...

Delirium 01-11-2010 00:45 1532011

Не вижу самой задачи. Описание вижу, информацию вижу, а вот того, что конкретно необходимо сделать, сделать только посредством SQL или еще как - не вижу. Также не вижу хотя бы начальных попыток сделать задание. Делать все с нуля никто не будет, а вот помочь с неверным запросом, подсказать, куда смотреть - всегда пожалуйста.

evg64 04-11-2010 15:50 1534675

Задача: добавить записи в таблицу PC.
Какие именно, описано в первом посте.

Это нужно сделать в 1 SQL запрос.

Над запросом я просидел долго. Сейчас он такой:

Код:

insert into pc
        ( code, model, speed, ram, hd, cd, price )

select min ( laptop.code )  + 20,
            min ( laptop.model ) + 1000,
            max ( laptop.speed ) * 2,
            max ( laptop.ram ) * 2,
            max ( laptop.hd ) * 2,
            min ( pc.cd ),
            max ( laptop.price ) / 1.5
    from laptop, pc
where laptop.model in
(Select model from laptop
group by model
having count(model)>1)

Логика такая:
Код:

insert into pc
        ( code, model, speed, ram, hd, cd, price )

Вставить значения, которые равны:
Код:

select min ( laptop.code )  + 20,
            min ( laptop.model ) + 1000,
            max ( laptop.speed ) * 2,
            max ( laptop.ram ) * 2,
            max ( laptop.hd ) * 2,
            min ( pc.cd ),
            max ( laptop.price ) / 1.5
    from laptop, pc

Минимальным значениям группы, где:
Код:

where laptop.model in
(Select model from laptop
group by model
having count(model)>1)

в каждой группе берутся только модели, которых в таблице Laptop больше одной.

Busla 04-11-2010 16:42 1534713

максимальная скорость блокнота - это пять!

"логика" не соответвует коду.

из insert и select убираем cd - значение по умолчанию на то и "по умолчанию", что его не надо указывать
хитрая конструкция с where здесь не требуется, достаточно указать group by model в основном select'е
агрегатная функция для model не нужна, т.к. в рамках группы model одинаковый
таблица pc в select'е не нужна

в условиях задачи я не увидел, что "группа" не может состоять из одной модели

evg64 05-11-2010 11:50 1535222

Спасибо! Разобрался :up:
Правильный запрос такой:
Код:

insert into pc
        ( code, model, speed, ram, hd, price )

select min ( code )  + 20,
            model + 1000,
            max ( speed ),
            max ( ram ) * 2,
            max ( hd ) * 2,
            max ( price ) / 1.5
    from laptop
group by model



Время: 04:56.

Время: 04:56.
© OSzone.net 2001-