Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610

    MYSQL query COUNT + GROUP BY su 3 tabelle

    Salve,

    mi servirebbe un aiuto su una query per un DB MYSQL. In pratica ho 3 tabelle, la prima di nome CONTO + la seconda di nome VENDITA + la terza di nome ACQUISTO.

    struttura tabella CONTI:
    id_conto INT (esempio 1)
    nome_conto (conto banca unicredir)


    struttura tabella VENDITA:
    id_vendita INT (esempio 1)
    id_conto INT (esempio 1)
    importo_vendita DOUBLE (esempio 700)

    struttura tabella ACQUISTO:
    id_acquisto INT (esempio 1)
    id_conto INT (esempio 1)
    importo_acquisto DOUBLE (esempio 500)

    con una unica query mi serve fare un COUNT del importo_vendita - importo_acquisto con un GROUP BY sul campo id_conto stampando naturalmente il campo nome_conto, il risultato a monitor dovrebbe essere:

    banca unicredit 4000
    banca san paolo -200
    banca unicredit2 0 (se non utilizzato)

    grazie mille in anticipo
    M.Solazzi
    from
    Mexico City!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610
    ho provato cosķ ma non mi ritorna un risultato corretto:

    SELECT C.conti, SUM(S.importo_vendita - P.importo_acquisto) as totale
    FROM conti as C, vendita as S, acquisto as P
    WHERE C.id_conto = S.id_conto
    AND S.id_conto = P.id_conto
    GROUP BY C.id_conto
    M.Solazzi
    from
    Mexico City!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610
    ho scritto male:

    SELECT C.nome_conto, SUM(S.importo_vendita - P.importo_acquisto) as totale
    FROM conti as C, vendita as S, acquisto as P
    WHERE C.id_conto = S.id_conto
    AND S.id_conto = P.id_conto
    GROUP BY C.id_conto
    M.Solazzi
    from
    Mexico City!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610
    il problema della mia query é questo:

    se i conti sono 3:
    banca di roma
    unicredit
    bnl

    vendite:
    unicredit 600 euro
    bnl 100 euro

    acquisti:
    unicredit 200 euro
    banca di roma 200 euro


    il risultato sarį:
    unicredit 400 euro (e basta) cioé visualizza solo se il conto si trova in entrambe le tabelle vendita/acquisto
    M.Solazzi
    from
    Mexico City!!

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    codice:
    select
    c.id_conto,
    c.nome_conto,
    coalesce(t.totale,0) as totale 
    from conti as c
    left join ( 
    select id_conto,sum(case when r.tipo = 2 then r.importo else -r.importo end) as totale from (
    select id_conto,importo_acquisto as importo,1 as tipo from acquisto
    union all
    select id_conto,importo_vendita,2 from vendita ) as r
    group by id_conto ) as t
    on c.id_conto = t.id_conto
    Per evitare problemi di arrotondamento usa il tipo decimal e non il double per gli importi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610
    provo la query e ti faccio sapere

    grazie
    M.Solazzi
    from
    Mexico City!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610
    nicola grazie della tua disponibilitį peró ho provato la query e non mi ritorna il risultato corretto, il DB é in spagnolo cioé io vivo in Messico credo é meglio che ti posto il nomi corretti dei campi e tabelle in spagnolo per risolvere in modo + facile senza dover sostituire i nomi dei campi, naturalmente posto solamete i nomi dei campi utili per la query.

    le tabelle interessate sono 3:

    cuentas
    id_cuentas (INTEGER)
    nombre_cuentas (VARCHAR)

    pagos_proyectos
    id_pagos_proyectos (INTEGER)
    id_cuentas (INTEGER)
    importe_pagos_proyectos (DOUBLE)

    pagos_proveedores
    id_pagos_proveedores (INTEGER)
    id_cuentas (INTEGER)
    importe_pagos_proveedores (DOUBLE)

    in pratica devo tirare fuori tutti i nomi dei conti (nombre_cuentas) della tabella "cuentas" ed a ogni nome di conto far apparire un totale che puó essere positivo o negativo o se nullo uguale a zero. La tabella pagos proyectos sarį il valore positivo e pagos proveedores il negativo ossia devo sottrarre (importe_pagos_proyectos - importe_pagos_proveedores), sono stato + chiaro? se non é cosķ fammi sapere ho bisogno davvero di questa quesry per terminare un programma PHP.

    Ti posto un esempio che dovrebbe apparire:
    BNL 100.00 EURO
    CASSA -200 EURO
    BANCA DI ROMA 0 EURO (se il conto non é utilizzato in nessuna tabella)

    GRAZIE
    M.Solazzi
    from
    Mexico City!!

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Hai provato con un banale trova e sostituisci?
    La query č quella.

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2002
    residenza
    Cittį del Messico (Messico)
    Messaggi
    610
    cioé la query funziona di per se non ha errori di sintassi ma non mi ritorna il risultato corretto....

    Ho un dubbio sulla query che ti volevo chiedere... scusami come si dice l'ignoranza che significa... case when r.tipo = 2...

    grazie
    M.Solazzi
    from
    Mexico City!!

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da M.Solazzi
    ma non mi ritorna il risultato corretto....
    Fai un esempio pratico di ciņ che restituisce la mia query e di cosa invece dovrebbe darti.

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.