所以我现在真的很挣扎,我几乎无处可寻,我找不到答案,所以我正在寻找一些指导。
我需要收集在task_tbl中最频繁出现的task_name,然后我需要查找job_tbl中已使用该任务的所有作业(注意,task_tbl中的每个值都有一个外键引用job_tbl)
此代码是我目前拥有的代码,这将成功返回最常见的task_name,但我仍然不确定如何找出使用此任务的所有作业。
select task_name
from
(select task_name, count(1)
from task_tbl
group by task_name
order by count(1) desc) a
where rownum = 1;
答案 0 :(得分:1)
这应该这样做:
select j.job_name
from job_tbl j
join task_tbl t
on t.job_fk = j.job_id
where t.task_name in ( <your query> );
假设job_id是job_tbl上的主键,job_fk是task_tbl上的外键列,job_name是你想要来自job_tbl的列。
答案 1 :(得分:0)
你可能需要这样的东西。
SELECT *
FROM job_tbl j
WHERE EXISTS (SELECT 1
FROM (SELECT task_name
FROM (SELECT task_name,
Count(1),
ROWNUM rn
FROM task_tbl
GROUP BY task_name
ORDER BY Count(1) DESC) a
WHERE rn = 1) b
WHERE b.task_name = j.task_name) ;
正如其中一条评论中所建议的那样,如果您使用的是Oracle 12c,则还有其他选择。上述查询中的内嵌视图a
可以替换为
SELECT task_name,
COUNT(1)
FROM task_tbl
GROUP BY task_name
ORDER BY COUNT(1) desc
FETCH first 1 ROWS only
不包括rn = 1