我有一个表Jobs
,其中有五列:
Skill1, Skill2, Skill3, Skill4, Skill5
每个列都与作为外键的同一表Job_Skill_Cat
链接。
我想计算与每种技能相关的工作数量。
输出应类似于
Java (5)jobs
C++ (23)jobs
Python (34)jobs
我已经尽力了,但是我只能提取与skill1
相关的工作。
SELECT
COUNT(JOB_ID), skill_name
FROM
jobs
INNER JOIN
job_skill_cat ON jobs.emplj_skill1 = job_skill_cat.skill_id
GROUP BY
skill_name
任何帮助将不胜感激。
答案 0 :(得分:0)
取消数据透视和getCustomProjects
:
join
在Oracle 12C +中,您可以为此目的使用横向联接来代替select jsc.skill_name, count(*)
from ((select job_id, skill1 as skill from jobs) union all
(select job_id, skill2 as skill from jobs) union all
(select job_id, skill3 as skill from jobs) union all
(select job_id, skill4 as skill from jobs) union all
(select job_id, skill5 as skill from jobs)
) j join
job_skill_cat jsc
on j.emplj_skill1 = jsc.skill_id
group by jsc.skill_name;
。
基本上,您的数据模型较差。您应该有一个union all
表,其中每个作业和每个技能一行。
答案 1 :(得分:0)
您需要UNION ALL
并执行JOIN
:
SELECT skill_id, skill_name, COUNT(*)
FROM (SELECT Skill1 AS Skill
FROM Jobs J UNION ALL
SELECT Skill2
FROM Jobs J UNION ALL
SELECT Skill3
FROM Jobs J UNION ALL
SELECT Skill4
FROM Jobs J UNION ALL
SELECT Skill5
FROM Jobs J
) j INNER JOIN
job_skill_cat jsc
ON jsc.skill_id = j.Skill
GROUP BY skill_id, skill_name;
答案 2 :(得分:0)
首先,我们将数据转换为行,然后将其分组并计算技能数量
WITH c AS (
SELECT DISTINCT job_Id, skill
FROM jobs j CROSS APPLY
( VALUES (skill1), (skill2), (skill3), (skill4), (skill5)
) jb (skill)
)
SELECT skill,COUNT(job_Id)
FROM c
GROUP BY skill ;