sql >> Databáze >  >> RDS >> Mysql

SQL dotaz pro získání mezisoučtu některých řádků

Můžete agregovat pomocí CASE výraz, který tvoří skupinu pomocí id pokud manager_id být nula, jinak pomocí manager_id . Zbytek logiky je podobný tomu, co již máte.

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;

Ukázka

Jedna poznámka na okraj:Použil jsem funkci v GROUP BY klauzule, která není v souladu s ANSI, a proto nemusí běžet všude. Abychom to napravili, můžeme nejprve zadat poddotaz vaší tabulky a vygenerovat efektivní skupiny manažerů. Pak použijte moji výše uvedenou odpověď proti tomuto mezivýsledku.




  1. porovnání dat podle měsíce a roku v mysql

  2. Jako cizí klíč použijte složený primární klíč

  3. Jak mohu zavolat funkci mysql (jako mysql_insert_id) z Perlu, pokud používám DBI/DBD?

  4. Příkaz If v rámci klauzule Where