[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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ウェブデザインにおける画像フォーマットとデザインの関係を詳しく説明
1. 背景ボタンは非常によく使われており、Element のボタン機能は非常に包括的です。この記事で...
データ内に次のような特徴を持つ「 ' 」などの文字が含まれることがあります。 &# ...
Web デザインでは、Web サイトに表示されるデータの構造とコンテンツをユーザーが明確に理解できる...
目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...
効果: コード: <テンプレート> <div class="back-t...
Docker の作成Compose の紹介Compose は、マルチコンテナ Docker アプリケ...
このプロジェクトは最近テストされ、テスターから、トークンの有効期限が切れたため、ルートが自動的にログ...
目次実際のプロジェクトで遭遇する要件実装が間違っているところもある私は個人的に、実装するより良い方法...
昨日 HTML を少し学んだばかりで、JD.com の検索バーを作るのが待ちきれませんでした。 作っ...
前回、私たちは 2 つのヘッダー レイアウト (フレックスボックス 1 つとフロート 1 つ) を考...
目次意味構造例カスタムショートカットキー元に戻すとやり直し録音と再生マクロ要約する意味リクエストをオ...
ボックス モデルは、要素ボックスの幅と高さ、パディング、境界線、余白のサイズを指定します。境界線の内...
最近、自宅サーバーにクラウドディスクを導入する予定なので、一連の環境構築作業を始めました。MySQL...
input と img を同じ行に配置すると、img タグが常に input より 1 つ上になり、...
目次導入Next.jsプロジェクトを作成するNext.js プロジェクトを手動で作成するcreact...