Найти количество строк в нескольких таблицах на основе внешнего ключа в данной таблице - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть база данных, которая содержит следующие таблицы, которые меня интересуют.

  1. JobAreas (базовая таблица, для которой я хочу запросить другие таблицы)
  2. JobSkills (навык для каждой работы) принадлежит рабочей области через внешний ключ, т.е. parent_id)
  3. Jobs (Каждое задание должно принадлежать рабочей области через внешний ключ, т.е. category_id)
  4. UserSkills (Эта таблица содержит JobSkill, связанный с Рабочая область)

Я прикрепляю структуры таблиц.

enter image description here

enter image description here

enter image description here

Я пытаюсь создать запрос SQL, который может дать мне количество навыков, количество рабочих мест и количество людей для различных вакансий Области. Хотя подсчет пользователей, которые предлагают услуги в определенной области работы, кажется сложным, поскольку он связан косвенно. Я попытался получить количество навыков и количество рабочих мест для всех рабочих мест, используя следующий запрос:

select
  t.id,
  t.title,
  count(s.parent_id) as skillsCount,
  count(m.category_id) as jobCount
from
  job_areas t
  left join skill_types s ON s.parent_id = t.id
  left join job_requests m ON m.category_id = t.id 
group by
  t.id

Но он не дает правильных данных. Кто-нибудь может направить меня в правильном направлении, как этого добиться.

enter image description here

1 Ответ

0 голосов
/ 15 апреля 2020

Вы объединяетесь в разных измерениях. Быстрый и грязный способ исправить это - использовать count(distinct):

select t.id, t.title,
       count(distinct s.parent_id) as skillsCount,
       count(distinct m.category_id) as jobCount
from job_areas t left join
     skill_types s
     ON s.parent_id = t.id left join
     job_requests m 
     ON m.category_id = t.id 
group by t.id;

. Это прекрасно работает, если для каждой работы есть всего несколько навыков и категорий. Если их много, вы хотите выполнить предварительную агрегацию до join или использовать коррелированные подзапросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...