frifin:
私はleetcodeで、このランクスコアの問題解決しようとしています:https://leetcode.com/problems/rank-scores/をし、私は2つのソリューション(MySQLを)持っています。どちらの作品。
select a.Score as Score,
(select count(distinct b.Score) from Scores as b where b.Score>=a.score) as Rank
from Scores as a
order by a.Score desc;
そして
select s1.Score,count(distinct(s2.score)) Rank
from
Scores s1,Scores s2
where
s1.score<=s2.score
group by s1.Id
order by Rank
しかし、私は私が作るために溶液2中でGROUP BYを使用する必要が理由ではないと確信していることを確認して、SQL計算各スコアのカウント(またはそうでなければ最小スコアのみを返す)が、私は解決策の一つに、それを使用する必要はありません。
GMB:
私は確信して各スコアのカウントSQL計算ことを確認するために溶液2中でGROUP BYを使用する必要がなぜしかし、私はわかりません
2番目のクエリは、不等式条件に自己入社テーブルで動作します。各行の別名でs1
、あなたは内のすべての行を取得するs2
ことに小さいか等しいスコアを持っています。あなたは、あなたがどのように多く数えることができるように集約する必要がありs2
、それぞれのためにそこにある行s1
あなたのランクを与えます、。
注:あなたは、MySQL 8.0を実行している場合、あなたは窓関数を使用して、参加するか、サブクエリなしでこれを行うことができrank()
、正確に何をしたい行います。
select score, rank() over(order by score desc) rn from scores
最後に:2020のように、あなたが使用する必要があります明示的に、標準はかなり古い学校より参加し、暗黙的に参加します:
select s1.score, count(distinct(s2.score)) rn
from scores s1
inner join scores s2 on s1.score <= s2.score
group by s1.id, s1.score
order by rn