Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Komplexes SQL SELECT zum Berechnen der Bewertung für eine einzelne Spalte

Die Idee ist, eine Unterabfrage zu verwenden, um die Summe zu berechnen, dann die Berechnung durchzuführen und die Werte in eine einzelne durch Kommas getrennte Spalte zu schreiben, die Sie in PHP in ein Array umwandeln können:

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;

BEARBEITEN:

Tabellen in SQL sind von Natur aus ungeordnet und die Sortierung in SQL ist nicht stabil (was bedeutet, dass die ursprüngliche Reihenfolge nicht beibehalten wird). Sie können eine Reihenfolge in group_concat() angeben Aussage. Im Folgenden würden die Ergebnisse beispielsweise nach id sortiert :

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;

Und dies würde zuerst nach der höchsten Bewertung sortiert:

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

Sie können die Liste komplexer gestalten, indem Sie die id enthalten auch darin:

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