2017-05-07 11 views
2

enter image description hereSQL:同じクエリ

質問を取得するためにさまざまな方法で6節を使用する:つ以上の従業員を擁しています各部門について

は、 部門番号とその従業員の数を取得します誰が を40,000ドル以上にしていますか?

ANSWER1:

select dnumber,count(*) 
from department,employee 
where dnumber=dno and salary>40000 and 
    dno in (select dno from employee group by dno having count(*)>5) 
group by dnumber; 

ANSWER2:

SELECT Dnumber , COUNT(*) 
    FROM  DEPARTMENT, EMPLOYEE 
    WHERE Dnumber= Dno AND Salary > 40,000 
    GROUP BY Dnumber 
    HAVING COUNT(*)>5; 

のコースへのリンク:https://www.mscs.mu.edu/~praveen/Teaching/Fa06/Db/Lectures/ch8-queries.sql

ANSWER2私の試みです。それが正しいかどうかわからない。最初の答えよりも直感的です。彼らは同じですか?そうでない場合は、私のアプローチに何が間違っていますか?

+1

あなたの質問には、5人以上の従業員が40kを作っている必要があります。 5を超えるだけでなく、指定された給与を支払っている従業員を数える(5未満であるかもしれない) – Donnie

答えて

1

いいえ、2つのクエリは同じ結果セットを返しません。クエリが要件を満たしていません。

あなたのクエリには、従業員の人数とともに40kを稼ぐ5人以上の従業員を持つ部門だけが記載されています。しかし、要件は、最初に5人以上の従業員を持つ部門のリストを決定し、次に40k以上を稼ぐ従業員の数を列挙すると言います。

部門に6人の従業員がいて、そのうちの1人だけが40k以上を稼いでいる場合、クエリはこれを選択しませんが、最初のものはそれになります。

しかし、5人以上の従業員を持つ部門が40kを超える部門を持たないため、最初のクエリが完全に正しいとは思われません。私は左の結合を使用していたでしょう:

select dnumber,count(employee.dno) 
from department 
left join employee on department.dnumber=employee.dno and employee.salary>40000 
where dno in (select dno from employee group by dno having count(*)>5) 
group by dnumber; 
関連する問題