Premessa: sto svolgendo un piccolo progetto riguardante un magazzino e sono in procinto di creare la query che in base al dipendente da me scelto, ne estrae lo stipendio totale andando a pescare i valori dalle varie tabelle.
Questa è la parte, presa singolarmente che si preoccupa di calcolare la base fissa dello stipendio, che varia in base alle ore:
Codice:
SELECT dipendenti.nome, dipendenti.cognome, count(lavora.iddipendente) * contratti.costoorario
FROM dipendenti, contratti, stipula, lavora
WHERE dipendenti.iddipendente = 1 AND lavora.iddipendente = 1
AND stipula.iddipendente = 1 AND stipula.idcontratto = contratti.idcontratto;
prende i dati del dipendente dalla tabella dipendenti, le ore di lavoro da lavora e il costo orario dalla tabella contratti, stipula è l'associazione tra dipendenti e contratti. Il dipendente 1, Mario Bianchi, ha lavorato 6 ore e dal suo contratto percepisce 1 euro all'ora. Difatti il risultato della query è questo:
Codice:
+-------+---------+----------------------------------------------------+
| nome | cognome | count(lavora.iddipendente) * contratti.costoorario |
+-------+---------+----------------------------------------------------+
| Mario | Bianchi | 6.00 |
+-------+---------+----------------------------------------------------+
La parte, presa singolarmente che si occupa di calcolare il bonus stipendio è questa:
Codice:
SELECT dipendenti.nome, dipendenti.cognome, count (consegna.idfattorino) * contratti.bonusconsegna
FROM dipendenti, consegna, contratti, stipula
WHERE dipendenti.iddipendente = 1 AND stipula.iddipendente = 1
AND consegna.idfattorino = 1 AND stipula.idcontratto = contratti.idcontratto;
Effettua un lavoro praticamente identico alla precedente, solo che effettua un diverso calcolo, considerando il numero di consegne effettuate e moltiplicandole per il valore nel contratto. Il risultato, considerando che 'sto tizio ha fatto 2 consegne e prende 1 euro a consegna è:
Codice:
+-------+---------+----------------------------------------------------+
| nome | cognome | count(consegna.idfattorino) * contratti.bonusconsegna |
+-------+---------+----------------------------------------------------+
| Mario | Bianchi | 2.00 |
+-------+---------+----------------------------------------------------+
A me purtroppo interessava più che altro avere il TOTALE direttamente su quanto questo povero Cristo prende... Quindi ho creato una query di questo tipo:
Codice:
SELECT dipendenti.nome, dipendenti.cognome, count(lavora.iddipendente) * contratti.costoorario + count(consegna.idfattorino) * contratti.bonusconsegna AS Stipendio
FROM dipendenti, lavora, stipula, contratti, consegna
WHERE dipendenti.iddipendente = 1 AND lavora.iddipendente = 1
AND stipula.iddipendente = 1 AND consegna.idfattorino = 1
AND stipula.idcontratto = contratti.idcontratto;
Mi sarei aspettato come risultato del campo "Stipendio" il valore corretto, cioè 8 €, purtroppo la realtà è ben diversa, ottenendo invece 24 €...
Se provo a separare il count, utilizzando entrambi i campi nella stessa query ottengo per ognuno 12 €. Qualcuno sa da cosa possa derivare l'errore?
Grazie.