[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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ウェブデザインにおける画像フォーマットとデザインの関係を詳しく説明
ご存知のとおり、CSS の絶対位置はデフォルトでドキュメントに応じて設定されます。たとえば、posi...
123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...
MySQL5.7.21のインストールとパスワード設定のチュートリアルは次のとおりです。公式リファレン...
最近のプロジェクトでは、多くのフォーム、特にチェックボックスとラジオボタンの作成が含まれます。しかし...
パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...
Web ページのデザインに関する質問です。すべてに答えられるでしょうか? 1. 単一選択の質問 (...
目次概要関数シグネチャオプションパラメータ非厳密モード例外処理実用要約する概要ご存知のとおり、ES6...
前提条件: Web開発者プラグインがインストールされている操作手順: [ツール] -> [We...
1. MySQLは現在の日付と時刻を取得する関数1.1 現在の日付 + 時刻 (日付 + 時刻) ...
目次React Hooks に基づく状態共有の実装ユーザーエクスペリエンスこの記事では、主に Rea...
目次序文1. スケーラビリティとは何ですか?スケールアウトの利点:スケールアウトのデメリット:スケー...
目次概要1. バックエンドデータの取得と処理2. インターフェース表示処理概要前回のエッセイ「ステッ...
この記事では、参考までに、虫眼鏡のJavaScriptオブジェクト指向実装の具体的なコードを紹介しま...
目次パーサーとプリプロセッサクエリオプティマイザーMySQL クエリの最適化には、解析、前処理、最適...
目次vueカスタムディレクティブグローバル指令ローカル指示使用フック関数(両方ともオプション)使用方...