MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Ответить
Аватара пользователя
evg64

MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Сообщение evg64 »

Добрый день!

Задача такая:


читать дальше »



Цитата:



Для каждой группы блокнотов с одинаковым номером модели добавить запись в таблицу 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

Re: MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Сообщение Delirium »

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

Re: MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Сообщение evg64 »

Задача: добавить записи в таблицу 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

Re: MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Сообщение Busla »

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



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



из insert и select убираем cd - значение по умолчанию на то и "по умолчанию", что его не надо указывать

хитрая конструкция с where здесь не требуется, достаточно указать group by model в основном select'е

агрегатная функция для model не нужна, т.к. в рамках группы model одинаковый

таблица pc в select'е не нужна



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

Re: MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Сообщение evg64 »

Спасибо! Разобрался Изображение

Правильный запрос такой:



Код:

Код: Выделить всё

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
Ответить

Вернуться в «Программирование и базы данных»