[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. リクエスト回答インターフェース2. ユーザーの回答が正しいかどうかを判断します。回答が正しい場...
序文Linux のファイル権限管理はとにかく素晴らしいです。SUID、SGID、SBIT の機能を確...
偶然にも、SQL ステートメントを異なる MySQL インスタンスで実行すると、異なる結果が生成され...
justify-content:space-betweenレイアウトを使用する場合、要素の最後の行に...
Linux centos7 環境に MySQL をインストールする手順の詳細な紹介MySQLをインス...
毎日jQueryプラグイン - カルーセルチャートを実装するためのjQueryプラグイン。参考までに...
数日前、Codepen で @Kyle Wetton が書いた、CSS ブレンディング モードと S...
目次ストレージエンジンMySQL でサポートされているストレージ エンジン同時実行制御ロック粒子をロ...
目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...
一般的に、関数は実行する前に呼び出す必要があることはご存じのとおりです。以下に示すように、関数を定義...
私はデータベースツールとして Navicat を使用しています。他のものも同様です。 1. Navi...
MySQL では、REVOKE ステートメントを使用してユーザーの特定の権限を削除できます (ユーザ...
この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...
序文1. この記事ではMySQL 8.0バージョンを使用していますバージョン5.0と比較すると、パッ...
今日は、「ローテク」の問題について書きたいと思います。ちなみに、私は JavaScript Week...