ビジネスを想定: 2位の従業員の給与情報を見る データベースを作成する emps が存在する場合はデータベースを削除します。 データベースempsを作成します。 emps を使用します。 従業員テーブルを作成する( empId int 主キー、 -- 従業員番号 性別 char(1) NOT NULL、 -- 従業員の性別 hire_date date NOT NULL -- 従業員の入社日 ); 給与表を作成する( empId int 主キー、 給与の2倍 -- 従業員の給与); 従業員に値(10001、'M'、'1986-06-26')を挿入します。 従業員にVALUES(10002,'F','1985-11-21')を挿入します。 従業員にVALUES(10003,'M','1986-08-28')を挿入します。 従業員にVALUES(10004,'M','1986-12-01')を挿入します。 給与に値(10001,88958)を挿入します。 給与に値(10002,72527)を挿入します。 給与に値(10003,43311)を挿入します。 給与に値(10004,74057)を挿入します。 解決 1. (基本的な解決策) まず給与表から最高給与を探し、それを条件として2番目に高い給与を探します。 クエリステートメントは次のとおりです。 選択 E.empId、E.gender、E.hire_date、S.salary から 従業員Eが給与Sに加入 の上 E.empId = S.empId どこ S.給料= ( 給与からmax(給与)を選択 どこ 給料 (給与から最大(給与)を選択) ); -- ---------------クエリ結果------------- -- +-------+---------+-----------+---------+ | 従業員ID | 性別 | 入社日 | 給与 | +-------+---------+-----------+---------+ | 10004 | 男性 | 1986-12-01 | 74057 | +-------+---------+-----------+---------+ 2. (自己結合クエリ) まず、給与に関する自己結合クエリを実行します。s1<=s2 が s1.salary によってリンクされグループ化されている場合、count の値、つまり彼よりも給与が高い人の数は、count=2 の人を選択して 2 番目に高い給与を取得することでフィルタリングできます。 クエリステートメントは次のとおりです。 選択 E.empId、E.gender、E.hire_date、S.salary から 従業員Eが給与Sに加入 の上 E.empId = S.empId ここでS.給与= ( 選択 s1.給与 から 給与 s1 給与 s2 に参加 の上 s1.給与 <= s2.給与 グループ化 s1.給与 持つ count(個別のs2.salary) = 2 ); -- ---------------クエリ結果------------- -- +-------+---------+-----------+---------+ | 従業員ID | 性別 | 入社日 | 給与 | +-------+---------+-----------+---------+ | 10004 | 男性 | 1986-12-01 | 74057 | +-------+---------+-----------+---------+ 3. (自己結合クエリ最適化バージョン) 原理は2と同じですが、コードははるかに簡単です。上記の2つの方法は、最後の方法を導入するためのものです。多くの場合、group byとorder byには制限があります。初心者にとって、このより実用的なアイデアを習得することは依然として意味があります。 選択 E.empId、E.gender、E.hire_date、S.salary から 従業員Eが給与Sに加入 の上 S.empId =E.empId どこ (給与>=S.salaryの給与からcount(1)を選択)=2; -- ---------------クエリ結果------------- -- +-------+---------+-----------+---------+ | 従業員ID | 性別 | 入社日 | 給与 | +-------+---------+-----------+---------+ | 10004 | 男性 | 1986-12-01 | 74057 | +-------+---------+-----------+---------+ あくまでも簡単な要約ですので、間違いがありましたらご指摘ください。 要約する これで、order by を使用せずに MySQL でランキングを実装する 3 つの方法についての記事は終了です。order by を使用しない MySQL ランキングに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
序文私たちのビジネスがまだ初期段階にあり、同時実行の度合いが比較的低い場合、数年間はデッドロックの問...
適用シナリオ:新しい要件の 1 つはアンケート調査を行うことですが、必然的に多くの質問が含まれ、1 ...
MySQL ユーザーと権限MySQL には、MySQL と呼ばれるシステムに付属するデータベースがあ...
1. MySQL Community Server 5.6.35をダウンロードするダウンロードアドレ...
<br />ナビゲーションについて話すときは、ほとんどの場合、ナビゲーションがコンテンツ...
SELECT ステートメントの完全な構文は次のとおりです。 (7)選択 (8) DISTINCT ...
MySQL タイム ブラインド インジェクションの 5 つの遅延方法 (PWNHUB の予期しない解...
厳密に言えば、nginx には負荷分散バックエンド ノードのヘルス チェック機能はありませんが、デフ...
元データと対象データSQL文を実装する(最大) 選択 店、 月、 最大(dz,fz,sp) が最大値...
目次はじめにNginx Dockerファイル新しい会議もっと参考文献はじめに最近、アプリケーションの...
1. 問題の説明今日、システム ログ ファイルを確認する必要がありますが、/var/log/mess...
mptemp は安全な方法で一時ファイルまたはディレクトリを作成します。このコマンドの適用範囲: R...
この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有して...
テーブルが広い場合は、あふれてしまう可能性があります。たとえば、左と右の 2 つの div がありま...
目次Dockerコンテナのデータ量データボリュームの使用方法1: コマンド-vを使用して直接マウント...