sql >> Databasteknik >  >> RDS >> Mysql

Komplex SQL SELECT för att beräkna betyg på en enda kolumn

Tanken är att använda en underfråga för att beräkna summan, sedan göra beräkningen och lägga in värdena i en enda kommaavgränsad kolumn, som du kan omvandla till en array i 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;

EDIT:

Tabeller i SQL är i sig oordnade och sortering i SQL är inte stabil (vilket innebär att den ursprungliga ordningen inte bevaras). Du kan ange en ordning i group_concat() påstående. Till exempel skulle följande ordna resultaten efter 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;

Och detta skulle sorteras efter högsta betyg först:

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

Du kan göra listan mer komplex för att inkludera id i den också:

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



  1. Ta bort från tabellen med kolumnen i den andra tabellen

  2. Stäng av varningar och fel på PHP och MySQL

  3. Hämta data med Jquery, AJAX och PHP från en MySQL-databas

  4. MySQL - Välja en kolumn som inte finns i Gruppera efter