|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
Всем крепкого здоровья. Помогите, пожалуйста, с решением задачи. Задача не учебная. Я не прошу сделать за меня мою работу и выдать готовый запрос, хотя бы подскажите направление (как поступают профессионалы в таких случаях). Суть: Сотрудники выполняют типовые задания и получают оценки. Сотрудник может выполнить только один (или несколько) из пяти этапов: получил заказ, передал на производство, отгрузил, оформил документы. Шестибалльная система оценок: 0 - опозорился/нанёс ущерб, 1 - не справился, ... 5 - отлично справился. NULL - не участвовал в данном этапе выполнения задания. Таким образом, если он просто "блестяще отгрузил", итоговая средняя оценка по заданию - 5, не смотря на то, что в остальных ячейках оценок - NULL. Требуется посчитать среднюю (арифметическую) оценку по каждому сотруднику за выбранный период при том, что количество выполненных заданий у каждого - своё. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Обычно здесь просят показать мои неудачные запросы. Их нет, потому, что я не знаю как подступиться. Если ничего не придумаю - сделаю выборку по дате, переберу и сгруппирую её средствами PHP, но это медленно и не изящно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 20:07 |
|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
Honcho Код: sql 1. 2. 3. 4. 5.
Вменяемый архитектор боевой БД так не сделает. Код: sql 1. 2. 3. 4. 5. 6. 7.
Если бы структура таблицы была более логичной - по записи на каждую оценку - то хватило бы одной функции AVG() и группировки по сотруднику. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2021, 22:22 |
|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
miksoft, Большое спасибо. Что можете посоветовать в плане архитектуры, при условии, что в большой оценке 5 составляющих присутствуют всегда, и evaluation_1 - "приём заказа" - не то же самое, что evaluation_5 - "оформление закрывающих документов"? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 08:31 |
|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
Получилось следующее: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 11:27 |
|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
Honcho Что можете посоветовать в плане архитектуры ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2021, 21:01 |
|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
Gluck99, Спасибо. Я думал над этим. Сначала хотел вынести оценки в отдельную таблицу: task_ideval_typeeval_value15341151534125153413415341431534155 Но потом решил, что проще записать оценки в одну строку таблицы заданий (в примере - ac_dummy): всего 5 tinyint - удобно и компактно, сразу видно неучастие сотрудника в каком-то этапе. Насчёт масштабирования согласен с Вами, но в данном случае революционных изменений не предвидится, в крайнем случае можно будет добавить один столбец. Как вариант думал хранить все оценки в одном целом числе. Понадобилось бы 15 бит - smallint. Всё было бы ещё быстрее и компактнее ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 15:34 |
|
Вычисление средней оценки
|
|||
---|---|---|---|
#18+
Honcho Но потом решил, что проще записать оценки в одну строку таблицы заданий (в примере - ac_dummy): всего 5 tinyint - удобно и компактно, сразу видно неучастие сотрудника в каком-то этапе. А когда заказчик войдет во вкус и захочет разные задания для разных подразделений, вложенные задания, пересдачи и т.п. - будет еще неудобнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 21:18 |
|
|
start [/forum/topic.php?fid=47&fpage=9&tid=1828108]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 239ms |
total: | 399ms |
0 / 0 |