LeetCode の SQL 実装 (177. 給与が N 番目に高い)

LeetCode の SQL 実装 (177. 給与が N 番目に高い)

[LeetCode] 177. 最も高い給与

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

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

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

この質問は、前回の「2番目に高い給与」の質問の拡張です。前回の質問のアプローチに基づいて、これを N に簡単に拡張できます。「2番目に高い給与」のソリューション 1 の分析によると、OFFSET の後の 1 を N-1 に変更するだけで済みます。ただし、MySQL はおそらくこの操作をサポートしていないため、エラーを報告します。次に、最初に SET N = N - 1 を追加して N を N-1 に変更し、次に同じ操作を実行します。

解決策1:

CREATE FUNCTION getNthHighestSalary(N INT) は INT を返します
始める
  N = N - 1 に設定します。
  戻る (
      SELECT DISTINCT Salary FROM Employee GROUP BY Salary
      ORDER BY 給与 DESC LIMIT 1 OFFSET N
  );
終わり

2番目に高い給与のソリューション4の分析によると、1をN-1に変更するだけで済みます。ただし、ここではN-1の計算をサポートしています。以下のコードを参照してください。

解決策2:

CREATE FUNCTION getNthHighestSalary(N INT) は INT を返します
始める
  戻る (
      従業員E1からMAX(給与)を選択
      ここでN - 1 =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM 従業員E2
      ここで、E2.Salary > E1.Salary)
  );
終わり

もちろん、最後の > を >= に変更して、N-1 を N に置き換えることもできます。

解決策3:

CREATE FUNCTION getNthHighestSalary(N INT) は INT を返します
始める
  戻る (
      従業員E1からMAX(給与)を選択
      ここでN =
      (SELECT COUNT(DISTINCT(E2.Salary)) FROM 従業員E2
      ここで、E2.Salary >= E1.Salary)
  );
終わり

類似トピック:

2番目に高い給与

参考文献:

https://leetcode.com/discuss/88875/simple-answer-with-limit-and-offset

https://leetcode.com/discuss/63183/変数を宣言せずに順序を使用する最速のソリューション

これで、LeetCode (177. 給料がN番目に高い) のSQL実装に関するこの記事は終了です。より関連性の高い給料がN番目に高いSQL実装のコンテンツについては、123WORDPRESS.COMの以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMを応援してください。

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

<<:  高度な JavaScript フロントエンド開発でよく使用されるいくつかの API の例の詳細な説明

>>:  Dockerコンテナでは、イメージを簡素化してサイズを縮小する方法を詳しく説明しています

推薦する

使用したコマンドを表示するLinuxコマンドメソッドの概要

システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...

Linux7で仮想ホストを実装する3つの方法

1. 同じIPアドレス、異なるポート番号仮想ホスト 1: ホスト IP アドレスは 172.16.3...

Linux システムで IPv6 をサポートするように Nginx を設定する方法

1. 既存のnginxがipv6をサポートしているかどうかを確認する既存の nginx が ipv6...

Momentsで写真を整理するためのCSSコード

まず、Moments を開いて、写真の数が異なるいくつかのレイアウトを確認するか、以下の例を参照して...

MySQL パフォーマンス チューニングについて知っておくべき 15 個の重要な変数 (要約)

序文: MYSQL は最も人気のある WEB バックエンド データベースです。最近、NOSQL がま...

Docker ベースの Redis マスタースレーブ クラスタの実装

目次1. Redisイメージを取得する2. 6つのRedisコンテナを作成する3. Redisコンテ...

JavaScript 関数呼び出しの典型的なサンプルコード

目次JavaScript 関数呼び出しの典型的な例JS関数の定義と呼び出し方法要約するJavaScr...

HTML タイトルに二重引用符を追加する方法

<a href="https://www.jb51.net/" title...

HTML ファイルにファイルの内容を含める方法の概要

フォーラムでは、ネットユーザーから「HTML ファイル内の別の HTML ファイルの内容を読み取るこ...

ウェブデザインの教育または学習プログラム

セクションコース内容営業時間1 ウェブデザインの概要2 2 HTML 基本タグとフォーマットタグ 2...

MySQLデータベースイベントスケジュール実行タスクの詳細な説明

1. 背景プロジェクトの業務が進むにつれて、データベース テーブルの数がどんどん大きくなり、ハードデ...

IDEA 2020.3.1 で Tomcat をデプロイし、最初の Web プロジェクトを作成するプロセスの詳細な説明

目次Tomcat の紹介Tomcat の展開Web プロジェクトの作成tomcatの設定プロジェクト...

MySQL5.7 シングルインスタンス自動起動サービスの設定プロセス

1.MySQLのバージョン [root@clq システム]# mysql -v MySQL モニター...

Alibaba Cloud ESC サーバー シングルノード MySQL の Docker デプロイメント

1. msyqlの高速バージョンをダウンロードする docker pull hub.c.163.co...

Dockerはプロセス操作を管理するためにSupervisorを使用する

Docker コンテナは、起動時に、たとえば ssh または apache デーモン サービスなどの...