PDA

View Full Version : [MySQL] Come posso effettuare questo semplice calcolo con una query?


fbcyborg
20-04-2010, 11:05
Salve a tutti,

supponiamo di avere una tabella 'ACQUISTI' come la seguente:
+-------------+----------+----------------+
| MATERIALE | QUANTITA | COSTO_UNITARIO |
+-------------+----------+----------------+
| materiale_1 | 25 | 1.00 |
| materiale_2 | 5 | 15.00 |
| materiale_3 | 7 | 32.00 |
| materiale_4 | 7 | 55.00 |
| materiale_5 | 4 | 2.00 |
| materiale_6 | 10 | 3.00 |
| materiale_7 | 10 | 4.00 |
+-------------+----------+----------------+
È possibile, facendo una query SQL, sapere il costo totale degli acquisti?
Ovvero, fare 25*1+5*15+....+10*4=787.
So che si possono fare delle operazioni ma non sono molto ferrato :rolleyes:

Qualcuno lo sa?

british
20-04-2010, 11:36
È possibile, facendo una query SQL, sapere il costo totale degli acquisti?


si.
imposta una SELECT in cui una delle colonne è creata dall'operatore SUM(<colonna di cui sommare le righe>).
Questo operatore restituisce la sommatoria di tutte le righe di <colonna di cui sommare le righe>.
<colonna di cui sommare le righe> può essere una singola colonna oppure un insieme di colonne con in mezzo operatori aritmetici (nel tuo caso "*" )...

guarda anche
http://www.w3schools.com/sql/sql_func_sum.asp
per l'uso "base" di SUM()

ciao!

british

fbcyborg
20-04-2010, 11:52
Grazie! Non sapevo potessi fare SUM(QUANTITA*COSTO_UNITARIO) AS SOMMA
Effettivamente funziona alla grande!

Grazie ancora!

lupoxxx87
20-04-2010, 11:53
il modo più semplice è quello di avere una quarta colonna SUBTOT, calcolata da una stored procedure,
e poi con una select fai la somma dei valori di quella colonna

select sum(subtot) from acquisti

edit:

dovrebbe essere anche accettata direttamente la query

select sum(quantità * costo_unitario) from acquisti

cionci
20-04-2010, 12:36
Ehm, non mi sembra tanto semplice...

fbcyborg
20-04-2010, 19:13
dovrebbe essere anche accettata direttamente la query

select sum(quantità * costo_unitario) from acquisti

Eh ma infatti! È il metodo che ho adottato!

lupoxxx87
20-04-2010, 19:54
ti funziona ?

fbcyborg
20-04-2010, 20:36
Sembrerebbe proprio di sì!!!

zuper
20-04-2010, 20:41
puoi anche fare le singole * e poi fare il totale :)

select MATERIALE, QUANTITA*COSTO_UNITARIO as 'COSTO' from ACQUISTI
union
select 'TOTALE', SUM(QUANTITA*COSTO_UNITARIO) from ACQUISTI

fbcyborg
20-04-2010, 22:06
Grazie, sembra comunque che le cose funzionino abbastanza bene.
In realtà ciò che ho chiesto inizialmente mi serviva di aiuto per risolvere un altro problema, ma sono rimasto "fregato" per il momento.

La situazione è questa:
Ho n magazzini e sono tutti memorizzati nella tabella magazzini:
MAGAZZINI
+-------------+-------+
| NOME_MAG | SEDE |
+-------------+-------+
| magazzino_1 | sede1 |
| magazzino_2 | sede2 |
| magazzino_3 | sede3 |
| magazzino_4 | sede4 |
| magazzino_5 | sede5 |
| magazzino_6 | sede6 |
| magazzino_7 | sede7 |
+-------------+-------+
L'applicazione prevede che vengano acquistati dei materiali e che se ne memorizzi il costo in un'altra tabella, e che si memorizzi il magazzino in cui andrà a finire ogni materiale:
MATERIALI_ASSEGNATI_AI_MAGAZZINI
+-------------+-------------+----------+----------------+
| NOME_MAG | MATERIALE | QUANTITA | COSTO_UNITARIO |
+-------------+-------------+----------+----------------+
| magazzino_1 | materiale_1 | 25 | 1.00 |
| magazzino_1 | materiale_2 | 5 | 15.00 |
| magazzino_1 | materiale_3 | 7 | 32.00 |
| magazzino_2 | materiale_4 | 7 | 55.00 |
| magazzino_3 | materiale_5 | 4 | 2.00 |
| magazzino_6 | materiale_6 | 10 | 3.00 |
| magazzino_6 | materiale_7 | 10 | 4.00 |
+-------------+-------------+----------+----------------+
Ora la domanda è: a quanto ammonta il costo di ogni singolo magazzino?
In questo caso, vorrei una query che mi restituisse questo risultato:
COSTO MAGAZZINI
+-------------+-------+----------------+
| NOME_MAG | SEDE | COSTO_TOTALE |
+-------------+-------+----------------+
| magazzino_1 | sede1 | 324.00 |
| magazzino_2 | sede2 | 385.00 |
| magazzino_3 | sede3 | 8.00 |
| magazzino_4 | sede4 | 0.00 |
| magazzino_5 | sede5 | 0.00 |
| magazzino_6 | sede6 | 70.00 |
| magazzino_7 | sede7 | 0.00 |
+-------------+-------+----------------+
Con le soluzioni che mi avete proposto fin'ora so calcolarmi il costo di un magazzino, ma essendo n magazzini, vorrei far calcolare quella funzione per ognuno, cosa che non riesco a fare, a meno di qualche raggiro a livello di programmazione. Ma prima volevo sentire voi, prima di scrivere software assurdo per calcolare qualcosa che magari è fattibile a livello di SQL!

Grazie!

cionci
20-04-2010, 22:08
Devi usare GROUP BY. Però queste cose le trovi su qualsiasi manuale base di sql ;)

zuper
20-04-2010, 23:37
Grazie, sembra comunque che le cose funzionino abbastanza bene.
In realtà ciò che ho chiesto inizialmente mi serviva di aiuto per risolvere un altro problema, ma sono rimasto "fregato" per il momento.

La situazione è questa:
Ho n magazzini e sono tutti memorizzati nella tabella magazzini:
MAGAZZINI
+-------------+-------+
| NOME_MAG | SEDE |
+-------------+-------+
| magazzino_1 | sede1 |
| magazzino_2 | sede2 |
| magazzino_3 | sede3 |
| magazzino_4 | sede4 |
| magazzino_5 | sede5 |
| magazzino_6 | sede6 |
| magazzino_7 | sede7 |
+-------------+-------+
L'applicazione prevede che vengano acquistati dei materiali e che se ne memorizzi il costo in un'altra tabella, e che si memorizzi il magazzino in cui andrà a finire ogni materiale:
MATERIALI_ASSEGNATI_AI_MAGAZZINI
+-------------+-------------+----------+----------------+
| NOME_MAG | MATERIALE | QUANTITA | COSTO_UNITARIO |
+-------------+-------------+----------+----------------+
| magazzino_1 | materiale_1 | 25 | 1.00 |
| magazzino_1 | materiale_2 | 5 | 15.00 |
| magazzino_1 | materiale_3 | 7 | 32.00 |
| magazzino_2 | materiale_4 | 7 | 55.00 |
| magazzino_3 | materiale_5 | 4 | 2.00 |
| magazzino_6 | materiale_6 | 10 | 3.00 |
| magazzino_6 | materiale_7 | 10 | 4.00 |
+-------------+-------------+----------+----------------+
Ora la domanda è: a quanto ammonta il costo di ogni singolo magazzino?
In questo caso, vorrei una query che mi restituisse questo risultato:
COSTO MAGAZZINI
+-------------+-------+----------------+
| NOME_MAG | SEDE | COSTO_TOTALE |
+-------------+-------+----------------+
| magazzino_1 | sede1 | 324.00 |
| magazzino_2 | sede2 | 385.00 |
| magazzino_3 | sede3 | 8.00 |
| magazzino_4 | sede4 | 0.00 |
| magazzino_5 | sede5 | 0.00 |
| magazzino_6 | sede6 | 70.00 |
| magazzino_7 | sede7 | 0.00 |
+-------------+-------+----------------+
Con le soluzioni che mi avete proposto fin'ora so calcolarmi il costo di un magazzino, ma essendo n magazzini, vorrei far calcolare quella funzione per ognuno, cosa che non riesco a fare, a meno di qualche raggiro a livello di programmazione. Ma prima volevo sentire voi, prima di scrivere software assurdo per calcolare qualcosa che magari è fattibile a livello di SQL!

Grazie!

qualcosa tipo

select sede.nome_mag, sede.sede, sum(acquisti.quantita*acquisti.costo_unitario)
from sede, acquisti
where sede.nome_mag=acquisti.nome_mag
group by sede.sede, sede.nome_mag

fbcyborg
21-04-2010, 11:01
Grazie!

Funziona tutto correttamente! :)