sql >> Base de Datos >  >> RDS >> Mysql

SQL complejo SELECT para calcular la calificación en una sola columna

La idea es usar una subconsulta para calcular la suma, luego hacer el cálculo y colocar los valores en una sola columna delimitada por comas, que puede transformar en una matriz en php:

select v.ip, group_concat(v.visits / iv.maxvisits) as ratings
from visit v join
     (SELECT ip, id, visits, max(visits) as maxvisits
      FROM visit
      GROUP BY ip
     ) iv
     on v.ip = iv.ip
group by v.ip;

EDITAR:

Las tablas en SQL están intrínsecamente desordenadas y la clasificación en SQL no es estable (lo que significa que no se conserva el orden original). Puede especificar un orden en el group_concat() declaración. Por ejemplo, lo siguiente ordenaría los resultados por id :

select v.ip, group_concat(v.visits / iv.maxvisits order by id) as ratings
from visit v join
     (SELECT ip, id, visits, max(visits) as maxvisits
      FROM visit
      GROUP BY ip
     ) iv
     on v.ip = iv.ip
group by v.ip;

Y esto estaría ordenado por la calificación más alta primero:

select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings

Puede hacer que la lista sea más compleja para incluir el id en él también:

select v.ip,
      group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings