Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344

    MySQL: SUM su campo calcolato

    Ho questa query:

    Codice PHP:
    SELECT DATE_FORMAT(data'%d/%m/%Y'),
    SUM(if(id_tipo_incasso=2totale0)) as tot_contanti,
    SUM(if(id_tipo_incasso=3totale0)) as tot_carta,
    SUM(if(id_tipo_incasso=4totale0)) as tot_bancomat
    FROM database
    .tabella
    where data 
    >= '2011-01-01' and data <= '2011-01-31'
    GROUP BY data
    che funziona correttamente.
    Ora però vorrei sommare sia i tre campi calcolati, sia avere le somma delle colonne calcolate, ma se faccio così ad esempio:

    Codice PHP:
    SELECT DATE_FORMAT(data'%d/%m/%Y'),
    SUM(if(id_tipo_incasso=2totale0)) as tot_contanti,
    SUM(if(id_tipo_incasso=3totale0)) as tot_carta,
    SUM(if(id_tipo_incasso=4totale0)) as tot_bancomat,
    (
    tot_contanti tot_carta tot_bancomat) as totale
    FROM database
    .tabella
    where data 
    >= '2011-01-01' and data <= '2011-01-31'
    GROUP BY data
    mi restituisce: colonna tot_contanti sconosciuta.

    Premesso che i totali li posso fare via php, volevo sapere se si potesse fare delle operazioni sui campi calcolati.

    grazie
    ciao

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Devi ripetere il sum(if(... sommando le tre voci.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Codice PHP:
    SELECT DATE_FORMAT(data'%d/%m/%Y'),
    SUM(if(id_tipo_incasso=2totale0)) as tot_contanti,
    SUM(if(id_tipo_incasso=3totale0)) as tot_carta,
    SUM(if(id_tipo_incasso=4totale0)) as tot_bancomat,
    (
    SUM(if(id_tipo_incasso=2totale0)) + SUM(if(id_tipo_incasso=3totale0)) + SUM(if(id_tipo_incasso=4totale0))) as totale
    FROM database
    .tabella
    where data 
    >= '2011-01-01' and data <= '2011-01-31'
    GROUP BY data
    Pertanto devo dedurre che non ci sia la possibilità di uilizzare i campi calcolati?

    Ovvero se poi volessi calcolare il totale del campo tot_contanti per l'intero mese, non potendo utilizzare il tot_contanti calcolato, dovrei mettere la condizione temporale sul singolo (in pratica viene molto più pulito e comodo calcolari da php sommando i valori allo scorrimento).

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    L'unica alternativa è questa ma non saprei se sia più o meno efficiente senza fare dei test.

    codice:
    select *,tot_contanti+tot_carta+tot_bancomat as totale from (
    SELECT DATE_FORMAT(data, '%d/%m/%Y'),
    SUM(if(id_tipo_incasso=2, totale, 0)) as tot_contanti,
    SUM(if(id_tipo_incasso=3, totale, 0)) as tot_carta,
    SUM(if(id_tipo_incasso=4, totale, 0)) as tot_bancomat
    FROM database.tabella
    where data >= '2011-01-01' and data <= '2011-01-31'
    GROUP BY data) as t

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    1,344
    Sì è chiaro, i campi calcolati vengono valorizzati effettivamente solo dopo la Select per cui fai la Select di Select.

    Non ci sono molti dati per cui non è un problema di efficienza per cui questa soluzione mi va bene.

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.