どうやら 合理的な質問のように。 SQLで物事を行うにはさまざまな方法があり、場合によっては他の方法よりも優れている方法もあります。ランキングの問題は、多くの例の1つにすぎません。あなたの質問に対する「答え」は、一般的に、並べ替えコード>です。
group by
よりもパフォーマンスが向上します MySQLで。それでも、特定のデータとあなたが「より良い」と考えるものに依存します。
質問に関する特定の問題は、3つの異なるものを返す3つの異なるクエリがあることです。
1つ目は、同じ「密なランク」を持つすべての従業員を返します。この用語は、ANSI density_rank()
に対応しているため、意図的に使用されています。 MySQLがサポートしていない機能。したがって、給与が100、100、および10の場合、ランキングが1の2つの行と、ランキングが2の1つの行が返されます。
同点がある場合、2番目は異なる結果を返します。給与が100、100、10の場合、このバージョンはランキング1の行を返さず、ランキング2の2行、ランキング3の1行を返します。
3つ目は、給与と給与のランキングだけである、まったく異なる結果セットを返します。
私のコメントは、あなたのデータに対してクエリを試すことを目的としていました。実際、機能とパフォーマンスの両方の観点から、実際に必要なものを決定する必要があります。