¿por qué tengo que usar grupo por aquí?

frifin:

Estoy tratando de resolver este problema puntuaciones de rango en leetcode: https://leetcode.com/problems/rank-scores/ y tengo dos soluciones (MySQL). Ambos trabajan.

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;

y

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

Pero no estoy seguro de por qué tengo que usar GROUP BY en la solución de los dos para asegurarse de que SQL calcular el recuento de cada puntuación (o si no devuelve la puntuación mínima solamente), pero no tiene que usarlo en una solución.

GMB:

Pero no estoy seguro de por qué tengo que usar GROUP BY en la solución de los dos para asegurarse de que SQL calcular el recuento de cada puntuación

La segunda consulta funciona por sí mismo de unirse a la mesa en una condición de desigualdad: para cada fila de alias s1, se obtiene todas las filas en s2que tienen una puntuación menor o igual. A continuación, deberá agregada para que pueda contar el número de s2filas que hay para cada s1, lo que le da el rango.

Nota: si está ejecutando MySQL 8.0, puede hacerlo sin una unión o subconsulta, utilizando la función de ventana rank(), que hace exactamente lo que quiere:

 select score, rank() over(order by score desc) rn from scores

Por último: a partir de 2020, usted debe utilizar explícitamente , se une estándar en lugar de la vieja escuela, se une implícita:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=298718&siteId=1
Recomendado
Clasificación