Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Złożony SQL SELECT do obliczenia oceny w jednej kolumnie

Chodzi o to, aby użyć podzapytania do obliczenia sumy, a następnie wykonać obliczenia i umieścić wartości w pojedynczej kolumnie oddzielonej przecinkami, którą można przekształcić w tablicę w 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;

EDYCJA:

Tabele w SQL są z natury nieuporządkowane, a sortowanie w SQL nie jest stabilne (co oznacza, że ​​oryginalna kolejność nie jest zachowana). Możesz określić kolejność w group_concat() oświadczenie. Na przykład poniższe uporządkowałoby wyniki według 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;

A to by było najpierw uporządkowane według najwyższej oceny:

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

Możesz uczynić listę bardziej złożoną, aby zawierała id w nim również:

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. Wybierz najnowszy rekord w tabeli (pole datetime)

  2. Najbardziej wydajny sposób przechowywania adresu IP w MySQL

  3. InnoDB:nie można zablokować ./ibdata1 błąd:35

  4. Mysql tworzy procedurę składowaną z wielu procedur składowanych

  5. Zaznaczanie wszystkich elementów w jednej tabeli i łączenie z inną tabelą, pozwalając na wartości null