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

Jak uzyskać procent sumy, gdy zapytanie ma GROUP BY?

W przypadku dużych zestawów JOIN może działać lepiej niż podzapytanie.

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  

W przypadku dużych zestawów i gdy zwracany jest duży procent wierszy, operacja JOIN może zwykle przewyższać podzapytanie. W twoim przypadku nie jest to skorelowane podzapytanie, więc MySQL nie powinien wykonywać tego wiele razy, więc może to nie robić żadnej różnicy.

Uwaga dla osób, które nie są fanami COUNT(1) ... możemy zastąpić dowolne i wszystkie wystąpienia COUNT(1) z COUNT(*) lub IFNULL(SUM(1),0) aby osiągnąć równoważny wynik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy ktoś wymyślił, jak skalować repliki Amazon RDS do odczytu?

  2. Zakres liczb całkowitych SQL podczas tworzenia tabel

  3. Przejdź z tradycyjnej replikacji do GTID

  4. mysql wybierz dynamiczne wartości wierszy jako nazwy kolumn, inną kolumnę jako wartość

  5. Klucze obce w problemie migracji Laravel 4