2017-12-13 15 views
0

私は本当に今は本当に苦労しています。私はどこでも見てきました。答えを見つけることができないので、私はいくつかのガイダンスを探しています。最も頻繁に値を見つけて参加する

task_tbl内で最も頻繁に出現したtask_nameを収集する必要があります。次に、そのタスクを使用したjob_tbl内のすべてのジョブを調べる必要があります(task_tbl内の各値は、 the 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; 
+1

Oracle 12.1以降では、 'fetch first'構文を使用して、このような上位n個の問合せを単純化できます。 –

答えて

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) ; 

コメントの1つに示唆されているように、Oracle 12cを使用している場合、別の選択肢があります。

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は外部キー列である:上記のクエリではインライン・ビューarn = 1

1

これはそれを行う必要があります除く

SELECT task_name, 
     COUNT(1) 
FROM task_tbl 
GROUP BY task_name 
ORDER BY COUNT(1) desc 
FETCH first 1 ROWS only 

置き換えることができますjob_tblで、job_nameはjob_tblから必要な列です。

関連する問題