sql >> Database teknologi >  >> RDS >> Mysql

Hvordan får man en procentdel af totalen, når forespørgslen har en GROUP BY?

For store sæt kan en JOIN fungere bedre end underforespørgslen.

SELECT ma.actor
     , COUNT(1) AS total
     , COUNT(1) / t.cnt * 100 AS `percentage`
  FROM movies_actors ma
 CROSS
  JOIN (SELECT COUNT(1) AS cnt FROM movies_actors) t
 GROUP
    BY ma.actor
     , t.cnt  

For store sæt, og når en stor procentdel af rækkerne returneres, kan JOIN-operationen normalt overgå en underforespørgsel. I dit tilfælde er det ikke en korreleret underforespørgsel, så MySQL burde ikke skulle udføre det flere gange, så det gør måske ikke nogen forskel.

Bemærkning til ikke-fans af COUNT(1) ... vi kunne erstatte enhver og alle forekomster af COUNT(1) med COUNT(*) eller IFNULL(SUM(1),0) at opnå tilsvarende resultat.



  1. Duplikere en MySQL-tabel, indekser og data

  2. Bedste praksis for design af brugerroller og tilladelsessystem?

  3. Reducer værdien i mysql, men ikke negativ

  4. MySQL:Total GROUP BY WITH ROLLUP nysgerrighed