Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2016, 18:03   #1
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию задача по sql

условие
Схема базы данных состоит из трех отношений:
utQ (Q_ID int, Q_NAME varchar(35)); utV (V_ID int, V_NAME varchar(35), V_COLOR char(1)); utB (B_Q_ID int, B_V_ID int, B_VOL tinyint, B_DATETIME datetime).
Таблица utQ содержит идентификатор и название квадрата, цвет которого первоначально черный.
Таблица utV содержит идентификатор, название и цвет баллончика с краской.
Таблица utB содержит информацию об окраске квадрата баллончиком: идентификатор квадрата, идентификатор баллончика, количество краски и время окраски.
При этом следует иметь в виду, что:
- баллончики с краской могут быть трех цветов - красный V_COLOR='R', зеленый V_COLOR='G', голубой V_COLOR='B' (латинские буквы).
- объем баллончика равен 255 и первоначально он полный;
- цвет квадрата определяется по правилу RGB, т.е. R=0,G=0,B=0 - черный, R=255, G=255, B=255 - белый;
- запись в таблице закрасок utB уменьшает количество краски в баллончике на величину B_VOL и соответственно увеличивает количество краски в квадрате на эту же величину;
- значение 0 < B_VOL <= 255;
- количество краски одного цвета в квадрате не превышает 255, а количество краски в баллончике не может быть меньше нуля;
- время окраски B_DATETIME дано с точностью до секунды, т.е. не содержит миллисекунд.
найти
C точностью до двух десятичных знаков определить среднее количество краски на квадрате.

пробовал вот так не выходит
select avg(tabel.vol) from
(select Sum(B_VOL) as vol from utB
inner join utQ on utB.B_Q_ID =utQ.Q_ID
group by utQ.Q_NAME) as tabel
ts-alan вне форума Ответить с цитированием
Старый 30.03.2016, 18:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
SELECT AVG(tabel.VOL)
  FROM (
    SELECT ISNULL(SUM(utB.B_VOL),0) AS VOL
      FROM utQ
        LEFT JOIN utB ON utB.B_Q_ID=utQ.Q_ID
      GROUP BY utQ.Q_ID) AS tabel
Если inner join, то вообще не крашенные квадраты выпадут, а они тоже влияют на среднее
group by utQ.Q_NAME не корректно, ни где не сказано, что название у разных квадратов разное.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.03.2016 в 18:22.
Аватар вне форума Ответить с цитированием
Старый 31.03.2016, 14:36   #3
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию

в выражении теряется дробная часть,как её сохранить
ts-alan вне форума Ответить с цитированием
Старый 31.03.2016, 14:37   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В каком?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2016, 11:13   #5
Rodini
Новичок
Джуниор
 
Регистрация: 05.06.2015
Сообщений: 2
По умолчанию Скорее вопрос в типах

Таблицы не имеют дробных значений и они будут преобразовываться к целым.
тут
utB (B_Q_ID int, B_V_ID int, B_VOL tinyint, B_DATETIME
datetime).

Тогда например вместо int (money,real)
Ну или так то с преобразованием и округлением до 2 знаков после запятой

SELECT round(AVG(cast(tabel.VOL as real)),2)
FROM (
SELECT ISNULL(SUM(utB.B_VOL),0) AS VOL
FROM utQ
LEFT JOIN utB ON utB.B_Q_ID=utQ.Q_ID
GROUP BY utQ.Q_ID) AS tabel

Последний раз редактировалось Rodini; 01.04.2016 в 14:16.
Rodini вне форума Ответить с цитированием
Старый 03.04.2016, 13:18   #6
ts-alan
Форумчанин
 
Регистрация: 07.07.2010
Сообщений: 825
По умолчанию

решая эту задачу на http://www.sql-ex.ru ,так вот пишет что

Код:
Ваш запрос вернул правильные данные на основной базе, но не прошел тест на проверочной базе.
* Несовпадение данных (1)
задача 28 в чем может быть причина?
ts-alan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на PL/SQl ShaoKahn Фриланс 4 08.12.2014 09:25
Задача на PL/SQl ShaoKahn SQL, базы данных 0 05.12.2014 10:26
Задача на sql oleg2012g SQL, базы данных 3 22.05.2013 10:42
Задача по SQL Сергей1_1 Фриланс 0 04.01.2011 00:10
Задача по SQL gotex SQL, базы данных 11 23.12.2010 17:52