Mysql
 sql >> Database >  >> RDS >> Mysql

SQL SELECT complesso per calcolare la valutazione su una singola colonna

L'idea è di utilizzare una sottoquery per calcolare la somma, quindi eseguire il calcolo e inserire i valori in un'unica colonna delimitata da virgole, che puoi trasformare in un array in 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;

MODIFICA:

Le tabelle in SQL sono intrinsecamente non ordinate e l'ordinamento in SQL non è stabile (il che significa che l'ordine originale non viene mantenuto). Puoi specificare un ordinamento in group_concat() dichiarazione. Ad esempio, quanto segue ordinerebbe i risultati in base a 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;

E questo ordinerebbe per primo il punteggio più alto:

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

Puoi rendere l'elenco più complesso per includere l'id anche in esso:

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