Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta SQL para obter o subtotal de algumas linhas


Você pode agregar usando um CASE expressão, que forma um grupo usando o id se o manager_id ser zero, caso contrário, use o manager_id . O resto da lógica é semelhante ao que você já tem.
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;



Demonstração



Uma nota lateral:usei uma função no GROUP BY cláusula, que não é compatível com ANSI e, portanto, pode não ser executada em todos os lugares. Para corrigir isso, podemos primeiro consultar sua tabela para gerar os grupos de gerenciadores efetivos. Então, use minha resposta acima contra esse resultado intermediário.