1

部門の名前と部門ごとの従業員数をリストするサブクエリを含むクエリを作成する必要があり、そのリストは job_title に「Representative」という単語があり、リストは department_id で並べ替える必要があります。

私はこのクエリを書きました

SELECT d.department_name, emp.employee_id
FROM departments d, employees emp, jobs j
WHERE emp.department_id=d.department_id
AND j.job_title LIKE '%Representative%';
4

3 に答える 3

0

サブクエリを使用する必要がある場合は、次の方法で探しているものを実現できます。

select   d.department_id,
         d.department_name,
         (select count(*)
          from   employees emp
          join   jobs j
          on     j.job_id = emp.employee_job -- I've made some assumptions, here!
          where  emp.department_id = d.department_id
          and    j.job_title like '%Representative%') reps
from     departments d
order by d.department_id;

ただし、個人的には、次のようなクエリを使用します。

select   d.department_id,
         d.department_name,
         count(emp.employee_id) reps
from     departments d
join     employees emp
on       emp.department_id = d.department_id
join     jobs j
on       j.job_id = emp.employee_job -- Same assumption as before!
where    j.job_title like '%Representative%'
group by d.department_id,
         d.department_name
order by d.department_id;

読みやすく解釈しやすいと思いますが、最終的にはあなた次第です。

于 2013-03-18T16:17:30.363 に答える
0

あなたの例にはいくつかの結合ロジックがありませんが、次のようなものがうまくいくかもしれません:

select d.department_name, count(emp.employee_id)
from departments d, employees emp, jobs j
where j.job_title in (select job_title from jobs where job_title like '%Representative%')
group by d.department_name

SQL は 100% 正しいとは限りませんが、要点はわかります。すべての結合ロジックなしで完了するのは困難です。

これにより、従業員の役職に代表者が含まれるすべての部署名と従業員数が返されます。

于 2013-03-18T16:17:36.070 に答える
0

これにはサブクエリは必要ありません。シンプルなJOIN.

  SELECT d.department_name, COUNT(*) AS cnt
    FROM employee e JOIN department d
         ON e.department_id = d.department_id
    JOIN jobs j ON e.jobid = j.jobid
   WHERE j.job_title LIKE '%Representative%'
GROUP BY d.department_name

または、それが単なる演習である場合は、次のクエリを使用することをお勧めします。

SELECT d.department_name
       , (SELECT COUNT(e.*)
            FROM employees e JOIN jobs j ON e.jobid = j.jobid
           WHERE e.department_id = d.department_id
             AND j.job_title LIKE '%Representative%') AS cnt
  FROM departments d

ただし、現実の世界では、演習のためだけでなく、利便性のためにコードを作成します。コードは、ソフトウェア開発プロセスに関与するすべての人にとって、読みやすく、理解しやすく、保守しやすいものでなければなりません。単なる演習である場合は、2 番目のクエリを使用できます。ただし、実際のアプリケーションでクエリを使用する必要がある場合は、最初のクエリのアプローチが周囲のすべての人にとって優れています。

于 2013-03-18T16:23:41.303 に答える