SQL実装 LeetCode (176. 2番目に高い給与)

SQL実装 LeetCode (176. 2番目に高い給与)

[LeetCode] 176. 2番目に高い給与

従業員テーブルから 2 番目に高い給与を取得する SQL クエリを記述します。

+----+--------+
| ID | 給与 |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+

たとえば、上記の従業員テーブルの場合、2 番目に高い給与は 200 です。2 番目に高い給与がない場合、クエリは null を返します。

この問題は、テーブルの列で 2 番目に大きい数字を見つけるように求めています。この問題を解く方法はたくさんあります。まず、2 つのキーワード Limit と Offset を使用したソリューションを見てみましょう。MySQL の Limit の後の数字は、返されるデータの数を制限し、Offset はオフセットです。したがって、2 番目に高い給与を検索する場合は、まず給与を降順で並べ替え、次に Offset を 1 に設定します。これは、2 番目、つまり 2 番目に高い給与から開始することを意味します。次に、Limit を 1 に設定します。これは、2 番目に高い給与のみを取り出すことを意味します。Limit を 2 に設定すると、2 番目と 3 番目に高い給与の両方が取り出されます。

解決策1:

従業員から給与を選択 給与でグループ化
UNION ALL (給与としてNULLを選択)
ORDER BY 給与 DESC LIMIT 1 OFFSET 1;

最大値を返す Max 関数を使用することもできます。ロジックは、最大値を含まない数値の最大値、つまり 2 番目に大きい値を取り出すというものです。

解決策2:

従業員からMAX(給与)を選択 
給与が支払われない場所
(従業員からMAX(給与)を選択);

次の方法は基本的に上記と同じですが、Not in キーワードの代わりに小なり記号 < が使用され、効果は同じです。

解決策3:

従業員からMAX(給与)を選択
給与 <
(従業員からMAX(給与)を選択);

最後に、N 番目に高い給料を見つけるために拡張できる方法を見てみましょう。次の文の 1 を N-1 に変更するだけです。N-1 を代入すると、2 番目に高い給料は 1 になります。次の文のロジックは、2 番目に高い給料を見つけたい場合は、最大値の 1 つが存在することを許可し、残りの数字の中で最大の値、つまり全体の 2 番目に大きい値を見つけるというものです。

解決策4:

従業員E1からMAX(給与)を選択
ここで 1 =
(SELECT COUNT(DISTINCT(E2.Salary)) FROM 従業員E2
ここで、E2.Salary > E1.Salary);

参考文献:

https://leetcode.com/discuss/47041/非常に非常にシンプルなソリューション

https://leetcode.com/discuss/42849/general-solution-not-using-max

https://leetcode.com/discuss/21751/simple-query-which-handles-the-null-situation

これで、LeetCode (176. 給与2位) のSQL実装に関するこの記事は終了です。給与2位のSQL実装に関するより関連性の高いコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • LeetCode の SQL 実装 (184. 部門内で最も高い給与)
  • LeetCode の SQL 実装 (183. 注文をしたことがない顧客)
  • LeetCode の SQL 実装 (182. 重複するメールボックス)
  • LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)
  • SQLはLeetCodeを実装します(180.連続した数字)
  • LeetCode の SQL 実装 (178. スコアランキング)
  • LeetCode の SQL 実装 (177. 給与が N 番目に高い)
  • SQL 実装 LeetCode (185. 部門内で最も給与の高い上位 3 名)

<<:  フレックスボックスレイアウトの最終行の左揃えの実装アイデア

>>:  Vueはシンプルな計算機能を実装します

推薦する

div の高さをブラウザの高さに合わせて調整する方法

この古くからある疑問は、数え切れないほどのフロントエンド開発者やバックエンドプログラマーを悩ませてき...

HTMLで細い線のテーブルを作成する簡単な例

この細線の表を作成する方法については、Baidu で検索すると、表に対して border="...

Vue3 (III) ウェブサイトホームページレイアウト開発

目次1. はじめに2. 実際の事例1. App.vueを変更する2. レイアウトを調整する3. ジャ...

Vue3 コンポジション API でロジックの再利用を実装する方法

Composition API はロジック再利用手順を実装します。ロジックコードを関数に抽出します。...

CocosCreator で物理エンジン ジョイントを使用する方法

目次マウスジョイント マウスジョイント距離ジョイント距離ジョイントモータージョイント直動ジョイント変...

メタビューポートタグ(モバイルブラウジングズームコントロール)の使用方法

OP が現在のファームウェアで Web ページを開くと、常に 50% にズームアウトされてから表示さ...

光沢のある輝くウェブサイトデザインの感動的なデザイン例

このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...

dockerコンテナにvimをインストールするソリューション

目次物語の始まりvimをインストールし、hadoop-hive.envを編集します。不注意で回避しま...

React Routerの歴史について簡単に説明します

React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...

Mysqlデータテーブルでワームレプリケーションを使用する方法

簡単に言えば、MySQL ワーム レプリケーションは、クエリされたデータを指定されたデータ テーブル...

Dockerパッケージイメージの実装と構成の変更

最近、Docker の学習や実際の運用で多くの問題に遭遇したので、それを記録するためにブログを書きま...

ページング効果を実現するNode+Express

この記事では、ページング効果表示を実現するためのnode+expressの具体的なコードを参考までに...

Windows 10 に Linux サブシステムをインストールする 2 つの方法 (画像とテキスト付き)

Windows 10 は Linux サブシステムをサポートするようになり、面倒なデュアル システ...

Vue での Vue.prototype の使用に関する詳細な説明

目次1. 基本的な例2. インスタンスプロトタイプのスコープを設定する3. グローバル変数の登録と使...

HTML ページ内の js および css ファイルのキャッシュを自動的にクリーンアップします (バージョン番号を自動的に追加します)

Web プロジェクトの開発プロセスでは、CSS ファイルや JS ファイルを参照することがよくあり...