powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменение значений на основе значений в БД.
7 сообщений из 7, страница 1 из 1
Изменение значений на основе значений в БД.
    #40002750
person_il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, участники форума!

Подскажите пожалуйста, каким образом можно реализовать следующее:
Существует таблица:
Номер_отдела | Название_задачи
-----------------------------------
1 | Задача_1
2 | Задача_2
2 | Задача_3

НЕОБХОДИМО ОТОБРАЗИТЬ:
Отдел | Занятость
------------------------
1 отдел | 0,33333
2 отдел | 0,66666
где Занятость рассчитывается следующим образом:
если Номер=1 то Занятость=1/3*Колво_задач
если Номер=2 то Занятость=2/3*Колво_задач

Возможна ли такая реализация в один (сложный) запрос или нет?

Заранее спасибо.
...
Рейтинг: 0 / 0
Изменение значений на основе значений в БД.
    #40002754
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
person_il,

Вот таким например dbfiddle
...
Рейтинг: 0 / 0
Изменение значений на основе значений в БД.
    #40002829
person_il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, MikkiMouse!

Спасибо большое за ответ!
О такой реализации я не знал...

Но есть одно но, выражение (SUM(COUNT(тбл.название_задачи)) over ()) as от_оно_че_михалыч
считается не по количеству задач, а по поличеству сотрудников, т.е.
1/3 и 2/3 это доль отдела в общем колве задач на колво сотрудников или
1 и 2 в числители это кол-во сотрудников в отделе, а 3 - это кол-во сотрудников в двух отделах.

Таким образом, возможно ли реализовать эту операцию по известному числа (ну например 3 чел в 1 отделе и 4 во 2 отделе)?
Если нет, возможно использовать дополнительную таблицу типа:
Сотрудник | Отдел
---------------------
ФИО_1 | 1
ФИО_2 | 1
ФИО_3 | 1
ФИО_4 | 2
ФИО_5 | 2
ФИО_6 | 2
ФИО_7 | 2


Заранее спасибо.
...
Рейтинг: 0 / 0
Изменение значений на основе значений в БД.
    #40002879
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
person_il,

Пиши еще раз набор данных и что должно получиться - попробуем реализовать. А то объяснения твои на словах очень путаные...
...
Рейтинг: 0 / 0
Изменение значений на основе значений в БД.
    #40003155
person_il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем имеем две таблицы:
Таблица 1 - Сотрудники организации
Сотрудник | Отдел
---------------------
ФИО_1 | 1
ФИО_2 | 1
ФИО_3 | 1
ФИО_4 | 2
ФИО_5 | 2
ФИО_6 | 2
ФИО_7 | 2
Таблица 2 - Список задач
Номер_отдела | Название_задачи
-----------------------------------
1 | Задача_1
2 | Задача_2
2 | Задача_3

Подскажите пожалуйста, каким образом на основе двух таблиц отобразить следующее:

Отдел | Занятость
------------------------
1 отдел | 0,4285
2 отдел | 1,1428

где Занятость рассчитывается следующим образом:
Занятость=N/M*Колво_задач
где N - это общее кол-во человек в 1 отделе
M - это общее количество человек в организации, которые выполняю задачи
Колво_задач - это те задачи которые выполнил соответствующий отдел
теперь непосредственно пример на основе приведенных таблиц:
1 отдел: 1 задача, 3 человека в отделе, 7 человек в организации
расчет таков: 3/7*1=0,4285
2 отдел: 2 задачи, 4 человека в отделе, 7 человек в организации
расчет таков: 4/7*2=1,1428

Возможна ли такая реализация в один (сложный) запрос или нет?

Заранее спасибо.
...
Рейтинг: 0 / 0
Изменение значений на основе значений в БД.
    #40003228
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
person_il,

А что вызывает сложность?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
--PostgreSQL 9.6
--'\\' is a delimiter

with emp as (
    select 'F1' emp, 1 dept_id
    union all
    select 'F2' emp, 1 dept_id
    union all
    select 'F3' emp, 2 dept_id
    union all
    select 'F4' emp, 2 dept_id
    union all
    select 'F5' emp, 2 dept_id
    union all
    select 'F6' emp, 2 dept_id
    union all
    select 'F7' emp, 1 dept_id    
),
tasks as (
    select 'T1' task, 1 dept_id
    union all
    select 'T2' task, 2 dept_id
    union all
    select 'T3' task, 2 dept_id
),
emp_grp as (
    select 
        dept_id, 
        count(*) cnt_dept, 
        sum(count(*)) over () cnt_all 
    from 
        emp 
    group by 
        dept_id
),
tasks_grp as (
    select 
        dept_id, 
        count(*) cnt_dept 
    from 
        tasks
    group by
        dept_id
)
select
    e.dept_id,
    trunc((e.cnt_dept/e.cnt_all)*t.cnt_dept, 4) res
from
    emp_grp e,
    tasks_grp t
where
    e.dept_id = t.dept_id;
...
Рейтинг: 0 / 0
Изменение значений на основе значений в БД.
    #40003688
person_il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Круто! Спасибо большое, видно я многого еще не знаю.
Осталось попробовать в связке с Embarcadero XE10.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Изменение значений на основе значений в БД.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]