Помогите с запросом с долями значений.

orsaf

Есть такие таблички в базе данных :id_element id_color answer 1 1 10 1 1 23 1 1 37 1 2 20 1 2 30 1 3 10 1 3 50 2 1 10 2 1 10 2 1 10 2 2 5 2 2 15 2 3 10id_ element element 1 Шар 2 Эллипсid_color color 1 Желтые 2 Красные 3 ***************, пожалуйста, построить запрос, которым можно было бы получить следующую таблицу: Здесь важны последних 2 столбца с долями. Или подскажите этапы решения этой задачи. Возможно, что это делается в несколько этапов.ELEMENT COLOR ANSWER шар желтые 70 29,17 29,17 красные 50 27,78 20,83 зеленые 60 33,33 25,00 итого 180 100,00 75,00эллипс желтые 30 50,00 12,50 красные 20 33,33 8,33 зеленые 10 16,67 4,17 итого 60 100,00 25,00 ИТОГО 240 100,00Эти же таблички есть во вложенном файле. cкачать
7 ответов

orsaf

Ну и какие могли встретиться проблемы при решении задачи?Сперва получите результат серией представлений. Одна вьюшка, на её основе вторая, на основе второй и исходной таблицы третья... и так далее, до полного удовлетворения. А потом сделайте обратную подставновку и получите готовый запрос.


orsaf

Я не совсем понял.Первая вьюшка может быть следующая:create view v_data asSELECT e.element, e.id_element, c.color, c.id_color, sum(a.answer ) sum_answerFROM tb_answer a LEFT JOIN tb_color c ON a.id_color = c.id_color LEFT JOIN tb_element e ON a.id_element = e.id_elementВторая (получает общие суммы по элементам): create view v_sum_el asSELECT va.element,va.id_element, sum(va.sum_answer) sum_elementFROM v_data va GROUP BY va.elementА вот как дальше, подскажите, пожалуйста?


orsaf

вернее , первая вьюшка таким запросом создается:create view v_data as SELECT e.element, e.id_element, c.color, c.id_color, sum(a.answer ) sum_answerFROM tb_answer a LEFT JOIN tb_color c ON a.id_color = c.id_color LEFT JOIN tb_element e ON a.id_element = e.id_elementGROUP BY a.id_element, a.id_color, c.color


orsaf

Первая вьюшка может быть следующая:
Туфта. Должно быть так:======================Постановка подзадачи:Первая вьюшка сгруппирует данные по элементу и цвету, и посчитает сумму.Решение подзадачи:
CREATE VIEW view1 AS
SELECT id_element
, id_color
, SUM(answer) sum_answer
FROM datatable
GROUP BY id_element
, id_color
======================И так каждый этап. Никто не будет гадать, что Вы намерены были сделать и каким путём идти.


orsaf

то есть, объединять все таблицы в первой вьюшке не нужно?


orsaf

Как получить в одной вьюшке сгруппированные суммы и итоговые суммы в одном столбце?


orsaf

то есть, объединять все таблицы в первой вьюшке не нужно?
А я почём знаю, на какие этапы Вы разобьёте решение задачи, и на каком из них намерены пришить остальные таблицы... Вы же не изложили весь план своих действий... но подтягивать словарные поля и потом волохать их с собой по всем вьюшкам я лично не считаю разумным.