sql >> Databáze >  >> RDS >> Mysql

Komplexní SQL SELECT pro výpočet hodnocení na jednom sloupci

Cílem je použít poddotaz k výpočtu součtu, pak provést výpočet a vložit hodnoty do jednoho sloupce odděleného čárkou, který můžete transformovat do pole v 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:

Tabulky v SQL jsou ze své podstaty neuspořádané a řazení v SQL není stabilní (to znamená, že původní pořadí není zachováno). Pořadí můžete zadat v group_concat() tvrzení. Například následující by seřadilo výsledky podle 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 toto by seřadilo podle nejvyššího hodnocení jako první:

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

Seznam můžete zkomplikovat tak, aby obsahoval id v něm také:

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



  1. MYSQL vyberte počet podle hodnoty

  2. Pořízení výpisu tabulek v oracle 10g pomocí procedury PL/SQL

  3. Python:Připojení k MySQL je otevřené, ale nelze vytvořit kurzor

  4. Oprava Msg 8116 „Datový typ argumentu varchar je neplatný pro argument 1 funkce session_context“ v SQL Server