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コンテナでは、イメージを簡素化してサイズを縮小する方法を詳しく説明しています

推薦する

docker CMD/ENTRYPOINT が sh スクリプトを実行する問題の解決策: not found/run.sh:

Dockerfile の設定に問題はありませんが、ENTRYPOINT コマンドを実行するとエラー...

フロントエンドパフォーマンス最適化に関する補足記事

序文私は、Web サイトのフロントエンド パフォーマンス最適化のための JavaScript と C...

HTML でフロートをクリアする 2 つの方法

1. クリアフローティング法1前の親要素の高さを設定します。注: エンタープライズ開発では、可能であ...

Ubuntu で apt-get を使用して mysql をインストールおよび完全にアンインストールする方法の詳細な説明

1. mysqlをインストールします。 udo apt-getでmysql-serverをインストー...

Mac インストール mysqlclient プロセス分析

仮想環境で pip 経由でインストールしてみてください: pip で mysqlclient をイン...

Windows 10 での MySQL 8.0.12 解凍バージョンのインストール グラフィック チュートリアル

この記事は、MySQL 8.0.12解凍版のインストールグラフィックチュートリアルを記録しています。...

MySQL シリーズ 4 SQL 構文

目次チュートリアルシリーズ1. SQL言語の紹介と仕様2. データベース操作1. ライブラリを作成す...

Linux で MySQL データベースのデータ ファイル パスを変更する手順

rpm インストール方法を使用して MySQL データベースをインストールした後、データ ファイルの...

docker を使用した pxc クラスターのインストールに関する詳細なチュートリアル

目次序文事前準備ディレクトリを作成するcustom.cnf を作成する証明書を作成するpxc クラス...

CSS 属性セレクタを使用して HTML DNA を接合する方法

CSS 属性セレクターは素晴らしいです。大量のクラス名を追加することを回避し、コード内の問題を指摘す...

Xtrabackup を使用した MySQL バックアップ プロセスの詳細な説明

目次01 背景02 はじめに03 ワークフロー04 いくつかの質問05 ファイルをバックアップする0...

VueはSplitを使用して、ユニバーサルドラッグアンドスライドパーティションパネルコンポーネントをカプセル化します。

目次序文始める基本レイアウトデータバインディングイベントバインディング最適化ジッター問題を最適化する...

JavaScript コンストラクタとプロトタイプの関係

目次1. コンストラクタとプロトタイプ1. コンストラクター2. コンストラクタ問題3. コンストラ...

MYSQL 演算子の概要

目次1. 算術演算子2. 比較演算子3. 論理演算子4. ビット演算子5. 演算子の優先順位1. 算...

Vue でデータコレクターを設計する

目次シナリオ中核問題ステータス監視状態監視の利点国家監視の欠点復興実行のアイデア依存関係の収集要約す...