Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

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

Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 20:56, 30-10-2010

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


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

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 00:45, 01-11-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:50, 04-11-2010 | #3


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


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

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

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

в условиях задачи я не увидел, что "группа" не может состоять из одной модели
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:42, 04-11-2010 | #4


Старожил


Сообщения: 186
Благодарности: 4

Профиль | Отправить PM | Цитировать


Спасибо! Разобрался
Правильный запрос такой:
Код: Выделить весь код
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

Отправлено: 11:50, 05-11-2010 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » MSFT SQL Server - [решено] Помогите в освоении SQL, не могу решить учебную задачу

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Помогите решить задачу Urann Программирование и базы данных 11 14-05-2013 11:44
C/C++ - [решено] Помогите решить задачу по С++ Spl1t Программирование и базы данных 301 21-12-2011 23:20
C/C++ - Помогите решить задачу zdughi Программирование и базы данных 1 01-05-2009 06:03
помогите решить задачу snikers Программирование и базы данных 2 27-08-2004 01:57
помогите решить задачу Guest Программирование и базы данных 2 21-05-2004 11:23




 
Переход