Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Помощь с PG SQL  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 3
Добрый день!
Подскажите пожалуйста, в чем проблема? Есть запрос:

select tou.title, count(distinct ts.title) from tbl_team te
join tbl_servicecall ts on ts.responsibleteam_id=te.id
join tbl_employee_teams et on te.id = et.teams_id
join tbl_employee e on et.employee_id = e.id
join tbl_ou tou on e.parent_id=tou.id
where ts.state not in ('closed', 'resolved', 'negotiation', 'waiting')
Group by tou.title

Но он выполняется оч долго (более 60 сек), долго выполняется из-за оператора distinct, нужно ускорить выполнение. Пробовал написать рекурсивный запрос, но ругается на таблицу

with recursive serv (title, title1, id) AS (
select tbl_ou.title, id as num from tbl_ou
union all
select tbl_ou.title, count(distinct tbl_servicecall.title), num+1 from tbl_team te
join tbl_servicecall ts on tbl_servicecall.responsibleteam_id=tbl_team.id
join tbl_employee_teams et on tbl_team.id = tbl_employee_teams.teams_id
join tbl_employee e on tbl_employee_teams.employee_id = tbl_employee.id
join tbl_ou tou on tbl_employee.parent_id=tbl_ou.id
where tbl_servicecall.state not in ('closed', 'resolved', 'negotiation', 'waiting')
)
select * from serv
group by serv.title, serv.title1, serv.id

Ошибка: недопустимая ссылка на запись предложения FROM для таблицы " вызов tbl_service"
Строка 5: Соедините tbl_service call ts на вызове table_service.ответственный...
^
Подсказка: возможно, вы хотели сослаться на псевдоним таблицы "ts".
SQL-состояние: 42p01
Символ: 205
14 янв 20, 11:14    [22058606]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с PG SQL  [new]
entrypoint
Member

Откуда:
Сообщений: 166
Александр Кузьминов,

А что с планом выполнения, индексы какие на таблицах, структура таблиц (ограничения и всё такое)?

Сообщение было отредактировано: 14 янв 20, 14:48
14 янв 20, 14:46    [22058849]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с PG SQL  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 3
entrypoint,
таблица должна состоять из 2х столбцов: первый текстовый, тип varchar, второй числовой, тип int

Группа xxxxxxx 16
Группа xxxxxxx 37
Группа xxxxxxx 85
Группа xxxxxxx 242
Группа xxxxxxx 173
14 янв 20, 15:14    [22058899]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с PG SQL  [new]
entrypoint
Member

Откуда:
Сообщений: 166
Александр Кузьминов,

Эх (((

Как минимум создайте индексы на

Таблица - tbl_servicecall - поле title
Таблица - tbl_servicecall - поле responsibleteam_id
Таблица - tbl_servicecall - поле state
Таблица - tbl_team - поле id
Таблица - tbl_employee_teams - поле teams_id
Таблица - tbl_employee_teams - поле employee_id
Таблица - tbl_employee - поле id
Таблица - tbl_employee - поле parent_id
Таблица - tbl_ou - поле id
Таблица - tbl_ou - поле title 
14 янв 20, 15:24    [22058918]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с PG SQL  [new]
Александр Кузьминов
Member

Откуда:
Сообщений: 3
entrypoint,

Пробовал с индексами, у меня почему-то при вызове рекурсивной функции на них ругается программа, если их заменить названиями таблицы - все работает.

Разобрался, проблема была в написанном в конце запроса операторе Limit 100 - Почему-то из-за него он долго выполнялся)

Спасибо.
14 янв 20, 15:28    [22058925]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с PG SQL  [new]
entrypoint
Member

Откуда:
Сообщений: 166
Александр Кузьминов,

Рекурсия не нужна (((
14 янв 20, 15:48    [22058942]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить