Ik wil in MySQL van een query die al een GROUP BY heeft de SUM hebben. Probleem is dat ik die GROUP BY moet laten staan, omdat deze belangrijk is voor de functie die wordt aangeroepen. De functie moet dus meerdere keren worden aangeroepen worden.

De query gaat als volgt (onderdeel van een procedure, die vult dus de verschillende variabelen in)

SELECT
    get_wage(
                mPid,
                SUM(`mScoreEntry`.`amount`) + IFNULL(SUM(DISTINCT(`mScoreVariable`.`amount`)), 0),
                work_date,
                `mSaleUnit`.`setMember`,
                personid
    )                                   AS  wage
FROM
    `mSaleUnit`
LEFT JOIN
    `mScoreVariable`
ON
    `mScoreVariable`.`fk_mSCid`         =   scoresheet                  AND
    `mScoreVariable`.`setMember`        =   `mSaleUnit`.`setMember`     AND
    `mScoreVariable`.`fk_pid`           =   personid
JOIN
    `mScoreEntry`
ON
    `mScoreEntry`.`fk_mSUid`            =   `mSaleUnit`.`mSUid`         AND
    `mScoreEntry`.`fk_mSCid`            =   scoresheet                  AND
    `mScoreEntry`.`fk_pid`              =   personid
GROUP BY
    mSaleUnit.setMember;


De functie get_wage wordt dus aangeroepen voor elke matchende unieke setMember, precies zoals de bedoeling is? Hoe krijg ik nu het totaal van de waarde die deze functie genereert terug? Ik heb zelf meerdere opties bedacht, deze zijn echter allemaal onhandig:

[*]Subquery: kan niet, omdat er meerdere resultaten zijn
[*]Cursors: lijkt me overkill voor zoiets simpels

Eigenlijk zoek ik dus iets wat dezelfde rijen genereert als WITH ROLLUP alleen dan zonder dat ik de originele rijen te zien krijg. Ik heb heel google afgestruind naar dingen als SUPER AGGREGATE maar ik vind niets waarmee ik enkel het totaal te zien krijg.
Zou het misschien kunnen met een view, of een temporary table mogelijk zijn waar je vervolgens, nadat je deze query hebt gedraaid om hem te genereren weer een query op los kan laten om de totalen te berekenen?
Hoort deze topic onder site reviews?

Reageren