[LeetCode] 178.ランクスコアスコアをランク付けする SQL クエリを記述します。2 つのスコアが同点の場合、両方のランキングは同じになります。同点の後、次のランキング番号は次の連続する整数値になることに注意してください。つまり、ランク間に「穴」があってはなりません。
たとえば、上記のスコア テーブルの場合、クエリによって次のレポートが生成されます (最高スコア順)。
この質問では、スコア表が与えられ、スコアを並べ替えるように求められます。 要件は、同じスコアが同じランクにあり、次のスコアが次の連続したランクにあり、間に空白の数字があってはならないことです。 私はこの質問をスティーブンの投稿に完全に従って書きました。 私は偉大な神を崇拝しています... 偉大な神は4つの方法を要約したので、1つずつ崇拝して学びましょう。 まず、最初の解決策を見てください。 問題を解決するアイデアは、表内の異なるスコアが各スコア以上であるかどうかを調べ、降順に並べることです。 次のコードを参照してください。 解決策1: SELECTスコア、 (SELECT COUNT(DISTINCT Score) FROM Scores WHERE Score >= s.Score) ランク FROM スコア s ORDER BY スコア DESC; 解決方法は上記と同じですが、書き方が少し異なります。 解決策2: SELECTスコア、 (SELECT COUNT(*) FROM (SELECT DISTINCT Score s FROM Scores) t WHERE s >= Score) ランク スコアからスコアの順に並べ替え、スコアの順に降順で並べ替えます。 次のソリューションでは、内部結合を使用します。結合は、Inner Join の略語です。これは、それ自体を内部結合します。条件は、右側のテーブルのスコアが左側のテーブルのスコア以上であることです。次に、グループがグループ化され、スコアの降順で並べられます。これは非常に巧妙なソリューションです。 解決策3: SELECT s.Score、COUNT(DISTINCT t.Score) ランク Scores s から Scores t を結合し、 s.Score <= t.Score を ON します。 GROUP BY s.Id ORDER BY s.Score DESC; 次のソリューションは、上記の 3 つのソリューションとは異なります。ここでは 2 つの変数が使用されています。使用する場合、変数の前に @ を追加する必要があります。ここでの := は割り当てを意味します。前に Set キーワードがある場合は、= 記号を使用して値を直接割り当てることができます。そうでない場合は、:= を使用して値を割り当てる必要があります。rank と pre という 2 つの変数があり、rank は現在のランキングを表し、pre は前のスコアを表します。次のコードの <> は等しくないことを意味します。左辺と右辺が等しくない場合は、true または 1 が返されます。等しい場合は、false または 0 が返されます。ランクを0、プレを-1に初期化し、スコアを降順に並べます。スコア4の場合、プレには4が割り当てられますが、これは前のプレ値-1とは異なります。そのため、ランクは1増加し、スコア4のランクは1になります。次のスコアはまだ4なので、プレには4が割り当てられますが、これは前の4と同じなので、ランクは0増加し、このスコア4のランクも1になります。このようにして、すべてのスコアのランクを計算できます。 解決策4: SELECTスコア、 @rank := @rank + (@pre <> (@pre := スコア)) ランク スコアから、(SELECT @rank := 0, @pre := -1) INIT ORDER BY スコア DESC; 参考文献: https://leetcode.com/discuss/40116/simple-short-fast これで、LeetCode (178. スコアランキング) の SQL 実装に関するこの記事は終了です。より関連性の高い SQL 実装スコアランキングコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援してください。 以下もご興味があるかもしれません:
|
先週、先生が私に数字当てゲームをするちょっとした宿題を出しました。とても面白いと思ったので、適当に書...
目次1. 概要1.1 Functionコンストラクタを使用して関数を作成する1.2 機能と目的2. ...
MQTT の紹介MQTT (Message Queuing Telemetry Transport)...
目次1.コンポーネントtimelineH.vueを実装する2. コンポーネントの呼び出しこの記事では...
バブリングとは何ですか? DOM イベント フローには、イベント キャプチャ ステージ、ターゲット ...
目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...
MySQL は最もよく使用されるデータベースです。詳しく知るには、コンピュータにインストールする必...
結果:実装コードhtml <div class='iphone'> &l...
数十 MB 程度の小さいものから 1G 以上の大きいものまで、ビデオ ファイルなどのファイルのアップ...
この記事では、CSS を理解し始めたばかりの人を対象に、主に HTML で clearfix と c...
目次序文JavaScript find() メソッドJavaScript filter() メソッド...
この記事では、例を使用して、MySQL 5.7 で生成された列の使用方法を説明します。ご参考までに、...
ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...
1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...
1. Linuxシステムにクロスシステムファイル転送ツールをインストールするルートユーザーのルートデ...