2012-06-25 256 views
7

Muy bien, entonces tengo una tabla de usuarios y me gustaría obtener el valor máximo para el usuario con la mayor cantidad de puntos divididos por una puntuación. A continuación se muestra una idea aproximada de lo que estoy buscando:Cómo sumar y dividir en MySql

SELECT MAX(SUM(points)/SUM(score)) FROM users 

No estoy interesado en la suma de ambas columnas y de división, en lugar Estoy interesado en dividir los puntos y la puntuación para cada usuario y recuperar el valor más alto del lote.

+4

¿SELECCIONA MAX (puntos/puntaje) DE usuarios que no funcionan? – thesunneversets

Respuesta

3

Tal vez usted podría hacer esto con una subconsulta: Descripción

Select max(points_over_Score) 
from 
    (Select points/score AS points_over_score 
    from users); 

Y como thesunneversets mencionados en un comentario, que probablemente puede ser acortado a

SELECT MAX(points/score) FROM users; 

Estás escrito de lo que' Estoy tratando de hacer, no deja claro por qué su ejemplo tiene SUM, así que no lo usé.

Además, las preguntas de código como esta son más apropiadas para stackoverflow.com. Puede marcar su propia pregunta para pedirle a un moderador que la migre.

+0

En realidad, funcionó perfectamente. Pensé que agregaría tanto los puntos como el puntaje (como en TODOS los puntos y puntajes) y luego iría desde allí, pero parece que lo haría como yo quería. Una última pregunta: ¿cómo puedo obtener el valor en forma decimal (si el número aparece en un decimal?) –

+0

@Nick: ¿Qué funcionó perfectamente? – FrustratedWithFormsDesigner

+0

La consulta que publicó funcionó exactamente como yo deseaba. Estaba diciendo que pensé que una consulta como esa daría como resultado la adición de ambas columnas y la devolución del resultado de los puntos divididos por puntaje, en lugar de devolver los puntos/puntaje más altos. Ahora solo necesito tenerlo así que si el resultado es un decimal, regresará como un decimal en lugar de ser redondeado. –

0

La respuesta de FrustratedWithFormsDesigner no funcionará si necesita resumir todos los puntos, luego todos los puntajes, y luego divida los dos. Esa respuesta divide cada punto por el puntaje, luego devuelve la respuesta más alta.

Esto debería funcionar:

SELECT MAX(sum_points/sum_score) from 
(SELECT SUM(points) as sum_points, SUM(score) as sum_score FROM users) 

Por cierto, este devuelve un porcentaje "inusual". Probablemente quiera dividir puntaje por puntos. Por ejemplo, si obtienes 70 de 100, eso es 70% o puntaje (70)/puntos (100).