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

Suma bieżąca w każdej grupie przy użyciu MySQL

W MySQL najbardziej wydajnym podejściem jest użycie zmiennych:

select e.*,
       (@s := if(@id = e.id, @s + salary,
                 if(@id := e.id, salary, salary)
                )
       ) as running_salary
from (select e.*
      from employee e
      order by e.id, e.month
     ) e cross join
     (select @id := -1, @s := 0) params;

Możesz to również zrobić za pomocą skorelowanego podzapytania:

select e.*,
       (select sum(e2.salary)
        from employee e2
        where e2.id = e.id and e2.month <= e.month
       ) as running_salary
from employee e;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 sposoby zwracania wierszy zawierających tylko znaki niealfanumeryczne w MySQL

  2. Jak posortować wyniki zapytań według odległości w pakiecie Laravel QueryBuilder / MySQL Spatial?

  3. Spadek wydajności po 5 dniach działania aplikacji webowej, jak rozpoznać wąskie gardło?

  4. Instrukcja PHP PDO INSERT WHERE NOT EXISTS nie działa

  5. Jak prawidłowo unikać warunków wyścigu Mysql?