Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Знатоки эс-ку-эль а подскажите что я не так делаю?  [new]
it_mozhor
Member

Откуда:
Сообщений: 50
В задаче 28 учебной на СКЛ-ЕКС.РУ результат выдает не то!! Походу я что то не до понимаю в условии задачи, ну или в решении.
+ Сама задача

Краткая информация о базе данных "Окраска"

Схема базы данных состоит из трех отношений:
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 дано с точностью до секунды, т.е. не содержит миллисекунд.

Задание: 28 (Serge I: 2015-03-20)

C точностью до двух десятичных знаков определить среднее количество краски на квадрате.
+ мое решение
select convert(decimal(20,2),AVG(convert(float,SUM_VOL))) from
(
	select Q_ID, SUM(B_VOL) SUM_VOL from
	(
		select
			v.V_ID, b.B_DATETIME, q.Q_ID, v.V_COLOR,
			b.B_VOL
		from
		(
			select B_V_ID, B_VOL, B_Q_ID, B_DATETIME from
			(
				select *, sum(B_VOL) over (partition by B_V_ID order by B_DATETIME) ITOG
				from utB
			) t
			where ITOG<=255
		) b
		join utQ q on q.Q_ID = b.B_Q_ID
		join utV v on v.V_ID = b.B_V_ID
	) t
	group by Q_ID
) t


Даже вставил проверку что бы если идет закраска из баллончика пустого - не учитывать это. Один фиг не сходятся цифры.
10 апр 17, 18:28    [20386379]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить