找到最常见的值并进行连接

时间:2017-12-13 15:25:18

标签: sql database oracle oracle-sqldeveloper

所以我现在真的很挣扎,我几乎无处可寻,我找不到答案,所以我正在寻找一些指导。

我需要收集在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;

2 个答案:

答案 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