sql >> Database >  >> RDS >> Mysql

Complexe SQL SELECT om beoordeling op een enkele kolom te berekenen

Het idee is om een ​​subquery te gebruiken om de som te berekenen, vervolgens de berekening uit te voeren en de waarden in een enkele door komma's gescheiden kolom te plaatsen, die u in php kunt omzetten in een array:

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;

BEWERKEN:

Tabellen in SQL zijn inherent ongeordend en het sorteren in SQL is niet stabiel (wat betekent dat de oorspronkelijke volgorde niet behouden blijft). U kunt een volgorde opgeven in de group_concat() uitspraak. Het volgende zou bijvoorbeeld de resultaten sorteren op 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;

En dit zou eerst op de hoogste beoordeling worden gerangschikt:

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

U kunt de lijst complexer maken door de id . op te nemen er ook in:

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



  1. Geneste klassen - CustomRowMapper !! Geen probleem meer!! - Deel 2

  2. Hulp bij SQL-query - heb twee waar-voorwaarden in samenvoegingsvoorwaarde

  3. Terug van Open Wereld 2013

  4. Wat is het semantische verschil tussen WAAR en HEBBEN?