sql >> Database >  >> RDS >> Mysql

SQL-query om het subtotaal van sommige rijen te krijgen

U kunt aggregeren met behulp van een CASE expressie, die een groep vormt met behulp van de id als de manager_id nul zijn, anders gebruik je de manager_id . De rest van de logica is vergelijkbaar met wat je al hebt.

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

Een kanttekening:ik gebruikte een functie in de GROUP BY clausule, die niet ANSI-compatibel is en daarom mogelijk niet overal wordt uitgevoerd. Om dit op te lossen, kunnen we eerst een subquery uitvoeren op uw tabel om de effectieve managergroepen te genereren. Gebruik dan mijn bovenstaande antwoord tegen dit tussenresultaat.




  1. Mysql-prestaties op zeer grote tafels

  2. Uitzondering in hoofdthread org.hibernate.MappingException:onbekende entiteit

  3. querytabel elke seconde voor kennisgeving. Is het een goede gewoonte?

  4. enum('yes', 'no') vs tinyint -- welke te gebruiken?