Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL заявка за получаване на междинната сума на някои редове

Можете да агрегирате с помощта на CASE израз, който образува група с помощта на id ако manager_id бъде нула, в противен случай се използва manager_id . Останалата част от логиката е подобна на това, което вече имате.

SELECT
    CASE WHEN manager_id = 0 THEN id ELSE manager_id END AS manager_id,
    MAX(CASE WHEN is_manager=1 THEN name END) AS name,
    SUM(no_of_items) AS total_items,
    SUM(revenue) AS total_revenue
FROM items_revenue
GROUP BY
    CASE WHEN manager_id = 0 THEN id ELSE manager_id END;

Демо

Една странична забележка:използвах функция в GROUP BY клауза, която не е съвместима с ANSI и следователно може да не се изпълнява навсякъде. За да поправим това, можем първо да подзапитваме вашата таблица, за да генерираме ефективните мениджърски групи. След това използвайте моя отговор по-горе срещу този междинен резултат.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво всъщност означава max_connections?

  2. опитвайки се да INSERT NULL, ако полето за въвеждане е оставено празно

  3. Незаконен низ офсет 'име' laravel

  4. Използва се COUNT в GROUP_CONCAT

  5. Предотвратяване на автоматично увеличение на InnoDB НА ДУПЛИКАТ КЛЮЧ