Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Abfrage, um die Zwischensumme einiger Zeilen zu erhalten

Sie können mit einem CASE aggregieren Ausdruck, der mit der id eine Gruppe bildet wenn die manager_id Null sein, andernfalls wird die manager_id verwendet . Der Rest der Logik ähnelt dem, was Sie bereits haben.

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;

Demo

Eine Randnotiz:Ich habe eine Funktion in GROUP BY verwendet -Klausel, die nicht ANSI-kompatibel ist und daher möglicherweise nicht überall ausgeführt wird. Um dies zu beheben, können wir zunächst Ihre Tabelle unterabfragen, um die effektiven Managergruppen zu generieren. Verwenden Sie dann meine obige Antwort gegen dieses Zwischenergebnis.