Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [Mysql] Problema con count e sum

    ciao ragazzi!

    ho un problema con una query.
    allora, ho tre record.
    due hanno data di novembre, e uno di dicembre.
    io faccio un group by mese per sommare i valori del mese.
    dovrei, però, anche fare il count dei record del mese.
    ed è qui che il problema:
    codice:
    SELECT COUNT(*) cnt, SUM(dtr_qta) sum_qta, SUM(dtr_prezzo - (dtr_prezzo * dtr_sconto / 100)) sum_netto,
        MONTH(dt_invio) mese
        FROM st_documenti_righe
        INNER JOIN st_documenti_testate ON dt_id = dtr_testata_fk
        WHERE dt_negozio_fk = 119038 AND dt_tipo_fk = 1
        AND dt_chiuso = 1 AND YEAR(dt_invio) = '2015'
        GROUP BY MONTH(dt_invio) ORDER BY MONTH(dt_invio)
    in pratica, tutti i valori sono giusti, tranne il count.
    la query tira fuori solo due record (da tre che erano), ed è ok.
    ma il valore di cnt è questo:
    codice:
    RECORD NOVEMBRE - 2 --> OK
    RECORD DICEMBRE - 3 --> DOVREBBE ESSERE 1
    come posso fare?

  2. #2
    vedo che hai testate e righe: forse hai una testata con tre righe; prova a specializzare la count

    COUNT(st_documenti_testate.dt_id)

    facce sape'

  3. #3
    ciao, grazie per la risposta.

    ho modificato la query in questo modo, ma senza successo:
    codice:
    SELECT SUM(dtr_qta) sum_qta, SUM(dtr_prezzo - (dtr_prezzo * dtr_sconto / 100)) sum_netto,
        MONTH(dt_invio) mese, COUNT(st_documenti_testate.dt_id) cnt
        FROM st_documenti_righe
        INNER JOIN st_documenti_testate ON dt_id = dtr_testata_fk
        WHERE dt_negozio_fk = 119038 AND dt_tipo_fk = 1
        AND dt_chiuso = 1 AND YEAR(dt_invio) = '2015'
        GROUP BY MONTH(dt_invio) ORDER BY MONTH(dt_invio);

  4. #4
    1. "senza successo" che vuol dire?
    2. puoi postare un esempio?

  5. #5
    senza successo intendo che i risultati di cnt non sono giusti, ma come prima.
    questi i record che tira fuori:
    codice:
    sum_qta sum_netto mese cnt
    16 177.04000000 11 2
    4 240.96000000 12 3
    in totale i record sarebbero tre.
    due su novembre e uno su dicembre.

    l'ultimo cnt dovrebbe essere uno quindi, e non tre!

  6. #6
    cmq si, il problema è la join tra righe e testate.
    perchè prendendo solo le testate funziona:
    codice:
    SELECT MONTH(dt_invio) mese, COUNT(st_documenti_testate.dt_id) cnt
        FROM st_documenti_testate
        WHERE dt_negozio_fk = 119038 AND dt_tipo_fk = 1
        AND dt_chiuso = 1 AND YEAR(dt_invio) = '2015'
        GROUP BY MONTH(dt_invio) ORDER BY MONTH(dt_invio);
    risultato:
    codice:
    mese cnt
    11 2
    12 1

  7. #7
    prova allora con una COUNT DISTINCT

  8. #8
    ok, con il COUNT(DISTINCT(dt_id)) cnt sembra funzionare bene.
    grazie!!!

  9. #9

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.