Sto lavorando alla creazione di una query SQL che estrarrà record da una tabella in base al valore di due funzioni di aggregazione. Queste funzioni aggregate estraggono i dati dalla stessa tabella, ma con condizioni di filtro diverse. Il problema che ho riscontrato è che i risultati delle SUM sono molto più grandi di quelli che includo solo una funzione SUM. So che posso creare questa query utilizzando le tabelle temporanee, ma mi chiedo solo se esiste una soluzione elegante che richiede solo una singola query.Più funzioni di aggregazione in una query SQL dalla stessa tabella utilizzando condizioni diverse
Ho creato una versione semplificata per dimostrare il problema. Qui ci sono le strutture delle tabelle:
EMPLOYEE TABLE
EMPID
1
2
3
ABSENCE TABLE
EMPID DATE HOURS_ABSENT
1 6/1/2009 3
1 9/1/2009 1
2 3/1/2010 2
Ed ecco la domanda:
SELECT
E.EMPID
,SUM(ATOTAL.HOURS_ABSENT) AS ABSENT_TOTAL
,SUM(AYEAR.HOURS_ABSENT) AS ABSENT_YEAR
FROM
EMPLOYEE E
INNER JOIN ABSENCE ATOTAL ON
ATOTAL.EMPID = E.EMPID
INNER JOIN ABSENCE AYEAR ON
AYEAR.EMPID = E.EMPID
WHERE
AYEAR.DATE > '1/1/2010'
GROUP BY
E.EMPID
HAVING
SUM(ATOTAL.HOURS_ABSENT) > 10
OR SUM(AYEAR.HOURS_ABSENT) > 3
Tutta la comprensione sarebbe molto apprezzato.
È un po 'di confusione. In base ai dati forniti, qual è il risultato atteso? – Raja