Mysql
 sql >> база данни >  >> RDS >> Mysql

Сложен SQL SELECT за изчисляване на рейтинг на една колона

Идеята е да използвате подзаявка, за да изчислите сумата, след това да направите изчислението и да поставите стойностите в една колона, разделена със запетая, която можете да трансформирате в масив в 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;

РЕДАКТИРАНЕ:

Таблиците в SQL по своята същност са неподредени и сортирането в SQL не е стабилно (което означава, че оригиналният ред не се запазва). Можете да посочите подреждане в group_concat() изявление. Например, следното ще подреди резултатите по 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;

И това ще бъде подредено първо по най-високия рейтинг:

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

Можете да направите списъка по-сложен, за да включите id и в него:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Не можете да посочите целева таблица „задачи“ за актуализиране в клауза FROM

  2. MySQL Cast като Boolean

  3. Посоченият ключ за Laravel беше твърде дълъг при създаване на таблица с известия

  4. Случайно блокирах root на MySQL

  5. грешка при автоматично увеличаване на mysql