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

Query SQL per ottenere il totale parziale di alcune righe

Puoi aggregare utilizzando un CASE espressione, che forma un gruppo utilizzando l'id se il manager_id essere zero, altrimenti utilizzando il manager_id . Il resto della logica è simile a quella che hai già.

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;

Dimostrazione

Una nota a margine:ho usato una funzione in GROUP BY clausola, che non è conforme all'ANSI e quindi potrebbe non essere eseguita ovunque. Per risolvere questo problema, possiamo prima eseguire una sottoquery della tabella per generare i gruppi di gestori efficaci. Quindi, usa la mia risposta sopra contro questo risultato intermedio.