MySQL - Optimice una consulta y encuentre un rango basado en la columna Suma
-
03-07-2019 - |
Pregunta
Tengo una base de datos de puntaje alto para un juego que rastrea cada jugada en una variedad de mundos. Lo que quiero hacer es encontrar algunas estadísticas sobre las jugadas, y luego encontrar dónde clasifica cada mundo " " " según el mundo del otro (ordenados por el número de veces que se juegan).
Hasta ahora tengo todas mis estadísticas funcionando bien, sin embargo, me he encontrado con un problema para encontrar la clasificación de cada mundo.
También estoy bastante seguro de que hacer esto en tres consultas separadas es probablemente una forma muy lenta de hacerlo y probablemente podría mejorarse.
Tengo una columna de marca de tiempo (no se usa aquí) y el " mundo " columna indexada en el esquema de base de datos. Aquí hay una selección de mi fuente:
function getStast($worldName) {
// ## First find the number of wins and some other data:
$query = "SELECT COUNT(*) AS total,
AVG(score) AS avgScore,
SUM(score) AS totalScore
FROM highscores
WHERE world = '$worldName'
AND victory = 1";
$win = $row['total'];
// ## Then find the number of losses:
$query = "SELECT COUNT(*) AS total
FROM highscores
WHERE world = '$worldName'
AND victory = 0";
$loss = $row['total'];
$total = $win + $loss;
// ## Then find the rank (this is the broken bit):
$query="SELECT world, count(*) AS total
FROM highscores
WHERE total > $total
GROUP BY world
ORDER BY total DESC";
$rank = $row['total']+1;
// ## ... Then output things.
}
Creo que la línea específica de código que me está fallando está en la consulta RANK,
WHERE total > $total
¿No funciona porque no puede aceptar un total calculado como un argumento en la cláusula WHERE?
Finalmente, ¿existe una manera más eficiente de calcular todo esto en una sola consulta SQL?
Solución
Creo que es posible que desee utilizar 'tener total > $ total '?
SELECT world, count(*) AS total
FROM highscores
GROUP BY world
having total > $total
ORDER BY total DESC