[LeetCode] 185. 部門別給与上位3位従業員テーブルにはすべての従業員が保持されます。すべての従業員には ID があり、部門 ID の列もあります。
部門テーブルには会社のすべての部門が保存されます。
各部門で給与上位 3 位の従業員を検索する SQL クエリを作成します。上記のテーブルの場合、SQL クエリは次の行を返します。
この質問は、以前の「部門の最高給与」の質問の延長です。これは「難しい」とマークされており、かなり難しいです。これは、以前の多くの質問の知識ポイントを組み合わせたものです。まず、Select Count (Distinct) を使用する方法を見てみましょう。従業員と部門の 2 つのテーブルを結合し、現在の給与よりも高い給与が 2 つしかないことを確認します。次に、最も高い給与の上位 3 つを取得できます。以下のコードを参照してください。 解決策1: SELECT d.Name AS Department、e.Name AS Employee、e.Salary FROM Employee e e.DepartmentId = d.Id で Department d を結合します WHERE (SELECT COUNT(DISTINCT Salary) FROM Employee WHERE Salary > e.Salary AND DepartmentId = d.Id) < 3 ORDER BY d.Name, e.Salary DESC; 次のメソッドは、上記のメソッドの <3 を IN (0, 1, 2) に置き換え、同じ効果をもたらします。 解決策2: SELECT d.Name AS Department, e.Name AS Employee, e.Salary FROM Employee e, Department d WHERE (SELECT COUNT(DISTINCT Salary) FROM Employee WHERE Salary > e.Salary AND DepartmentId = d.Id) IN (0, 1, 2) AND e.DepartmentId = d.Id ORDER BY d.Name, e.Salary DESC; または、Group by Having Count(Distinct ..) キーワードを使用してこれを行うこともできます。 解決策3: SELECT d.Name AS Department、e.Name AS Employee、e.Salary FROM (SELECT e1.Name, e1.Salary, e1.DepartmentId FROM Employee e1 JOIN Employee e2 ON e1.DepartmentId = e2.DepartmentId AND e1.Salary <= e2.Salary GROUP BY e1.Id HAVING COUNT(DISTINCT e2.Salary) <= 3) e JOIN Department d ON e.DepartmentId = d.Id ORDER BY d.Name, e.Salary DESC; 次の方法は少し複雑で、変数を使用します。これは、連続した数字のソリューション 3 で使用した方法と同じです。目的は、給与レベルに応じて各人にランクを追加し、最終的にランク値が 3 以下の項目を返すことです。以下のコードを参照してください。 解決策4: SELECT d.Name AS Department、e.Name AS Employee、e.Salary FROM (名前、給与、部門IDを選択、 @rank := IF(@pre_d = DepartmentId, @rank + (@pre_s <> Salary), 1) AS ランク、 @pre_d := 部門ID、@pre_s := 給与 従業員から、(SELECT @pre_d := -1, @pre_s := -1, @rank := 1) AS init ORDER BY DepartmentId, Salary DESC) e JOIN Department d ON e.DepartmentId = d.Id e.rank <= 3 の場合、d.Name、e.Salary で条件を満たす必要があります。 類似トピック: 部門最高給与 2番目に高い給与 2つのテーブルを結合する 参考文献: https://leetcode.com/discuss/23002/my-tidy-solution https://leetcode.com/discuss/91087/yet-another-solution-using-having-count-distinct https://leetcode.com/discuss/69880/two-solutions-1-count-join-2-three-variables-join これで、LeetCode (185. 部門内で給与の高い上位 3 位) の SQL 実装に関するこの記事は終了です。SQL 実装に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ウェブデザインにおける画像フォーマットとデザインの関係を詳しく説明
Like は中国語で「好き」を意味しますが、MySQL データベースに適用される場合、Like は、...
目次1. デザインパターンとは何ですか? 2. デザインパターンの5つの設計原則(SOLID) 3....
この記事の例では、参考までに簡単な虫眼鏡効果を実現するためのjsの具体的なコードを共有しています。具...
Compose のいくつかの部分は、何らかの方法で環境変数を扱います。このチュートリアルは、必要な情...
1. 表示効果: 2、HTML構造 <div class="プロセスリスト-lpu...
Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...
新しいプロジェクトを始めるこの記事では主に、新規プロジェクトを0から1まで取り組むプロセスを記録し、...
IDEA は Java で最も一般的に使用されている開発ツールであり、Docker は最も人気のある...
異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....
記事は主にUbuntu 20.04の簡単なインストールプロセスを記録し、インストール後に国内ソースを...
序文この記事は主に、MYSQL でランキングを実現し、指定ユーザーランキング関数 (並列ランキング関...
Ubuntu16.04 のインストールとアンインストール pip実験環境Ubuntu 16.04; ...
<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...
1. HTMLタグは常に閉じる前のページのソース コードでは、次のような記述がよく見られます。 &l...
目次1. コンストラクタとインスタンス化2. コンストラクターとインスタンス化の関係は何ですか? 3...