Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête SQL pour obtenir le sous-total de certaines lignes

Vous pouvez agréger à l'aide d'un CASE expression, qui forme un groupe en utilisant le id si le manager_id soit zéro, sinon en utilisant le manager_id . Le reste de la logique est similaire à ce que vous avez déjà.

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;

Démo

Une remarque :j'ai utilisé une fonction dans le GROUP BY clause, qui n'est pas conforme à la norme ANSI et peut donc ne pas s'exécuter partout. Pour résoudre ce problème, nous pouvons d'abord effectuer une sous-interrogation de votre table pour générer les groupes de responsables effectifs. Ensuite, utilisez ma réponse ci-dessus contre ce résultat intermédiaire.