SQLテストケース

私たちは、他の多くの組織と同様に、応募者が作品に参加するときにテストしています。 テストの基礎は口頭による面接ですが、場合によっては実際的なタスクも提供されます。 数日前、Managementは一連のSQLナレッジタスクを準備するように頼みました。



もちろん、私はタスクをあまり複雑にしないようにしました。 申請者のレベルは異なりますが、私の意見では、課題の解決策の結果によって対象が対象をどれだけよく知っているかを判断できるようにタスクを設計する必要があります。



また、1つまたは別のDBMSの機能に関する知識に関するタスクを提供することは意味がありませんでした。 私たちは仕事でOracleを使用しますが、これは、たとえばMS SQLまたはPostgreSQLのみを知っている申請者にとって困難を生じないはずです。 したがって、プラットフォーム固有のソリューションを使用することは禁止されていませんが、問題を解決する場合は想定されていません。



テスト目的で、Oracle 11gは次のテーブルを含むスキーマをデプロイしました。







次の5つのタスクを解決するには、SQLクエリを作成する必要がありました。



タスク1
直属の上司よりも高い給料を受け取っている従業員のリストを表示する



回答オプション
select a.* from employee a, employee b where b.id = a.chief_id and a.salary > b.salary
      
      









タスク2
部門の最高給与を受け取っている従業員のリストを表示する



回答オプション
 select a.* from employee a where a.salary = ( select max(salary) from employee b where b.department_id = a.department_id )
      
      









タスク3
部門ID(3人を超えない従業員数)のリストを表示します



回答オプション
 select department_id from employee group by department_id having count(*) <= 3
      
      









タスク4
同じ部門で働くマネージャーが任命されていない従業員のリストを表示する



回答オプション
 select a.* from employee a left join employee b on (b.id = a.chief_id and b.department_id = a.department_id) where b.id is null
      
      









タスク5
従業員の合計給与が最大の部門IDのリストを見つける



回答オプション
 with sum_salary as ( select department_id, sum(salary) salary from employee group by department_id ) select department_id from sum_salary a where a.salary = ( select max(salary) from sum_salary )
      
      









最適なソリューションを検索する必要はありませんでした。 唯一の要件:要求は、入力に対して正しい答えを返す必要があります。 タスクは、時間制限なしで、任意の順序で解決できました。 すべてのタスクの正しいソリューションを使用して、複雑さが増した次のタスクが提案されました。



追加のタスク
テーブルの一部の列に含まれる実際の値の積を計算するSQLクエリを作成します



回答オプション
 select exp(sum(ln(decode(sign(salary),0,1,-1,-salary,salary)))) *decode(mod(sum(decode(sign(salary),-1,1,0)),2),1,-1,1) *sign(min(abs(salary))) from employee
      
      









もちろん、ここに投稿された回答だけではありません。 申請者の要求に明らかなエラーが含まれていない場合、その実行結果(ソースデータの異なるセット)は、対応する参照要求の結果と比較されます。




All Articles