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

    [MYSQL] calcolare le medie al volo

    Ciao a tutti... io ho una tabella di un DB fatta più o meno così:

    - id_helpdesk
    - cod_cat
    - cod_sott
    - priorita
    - data_inizio
    - data_fine
    - stato
    - (altri dati non utili per il problema)

    In questa tabella ci sono tutti gli interventi fatti e richiesti tramite un helpdesk.
    Ora io devo tirare fuori un report che mi indichi il tempo medio di lavorazione per ogni categoria-sottocategoria raggruppando per priorità Quindi tutti i lavori a bassa priorità separati dala normale e dalla alta.

    L'SQL che ho tirato fuori per ora è:
    codice:
    SELECT cod_cat, cod_sott, COUNT(id_helpdesk) AS numero, priorita
    FROM mod_helpdesk
    WHERE stato='4'
    GROUP BY cod_cat,cod_sott,priorita
    dove stato= 4 sono i lavori finiti

    Con questo codice ho la divisione per categorie e sottocategorie, ed il numero di interventi per tipo di priorità... ma la media come la ottengo? Mi serve la media degli interventi raggruppati.
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  2. #2

  3. #3
    non ho provato, ma AVG fa una media di un campo, giusto?
    Ma come faccio a fare la media di una differenza tra 2 campi? dove devo prima fare la differenza dei singoli campi e poi la media. E' possibile farlo in una volta sola o devo fare più query?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  4. #4
    Come da manuale: AVG([DISTINCT] expr)
    AVG accetta come parametro una espressione che deve essere implementata a seconda del tipo utilizzato per data_inizio e data_fine.

  5. #5
    Allora, io ora faccio delle prove, ma le date sono in unixtime, quindi sono dei semplici interi.
    Come dovrebbe diventare il mio SQL?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  6. #6
    Originariamente inviato da rinosan_76bis
    Allora, io ora faccio delle prove, ma le date sono in unixtime, quindi sono dei semplici interi.
    Come dovrebbe diventare il mio SQL?
    Posta le tue prove ed il risultato che ottieni.

  7. #7
    L'SQL che ho scritto:
    codice:
    SELECT cod_cat, cod_sott, COUNT(id_helpdesk) AS numero, priorita, AVG(data_stop-data_avvio)
    FROM mod_helpdesk
    WHERE stato='4'
    GROUP BY cod_cat,cod_sott,priorita
    I dati non so come copiarli, ma quello che esce da AVG non è corretto di sicuro... in un record è uscito sto risultato:

    242720316759369863.0658

    che come media è un po troppo alta!
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

  8. #8
    A me AVG() funziona perfettamente:

    Codice PHP:
    DROP TABLE IF EXISTS `tabella`;

    CREATE TABLE IF NOT EXISTS `tabella` (
      `
    idint(10unsigned NOT NULL auto_increment,
      `
    data_inizioint(11NOT NULL,
      `
    data_fineint(11NOT NULL,
      
    PRIMARY KEY  (`id`)
    ENGINE=MyISAM;


    INSERT INTO `tabella` (`id`, `data_inizio`, `data_fine`) VALUES
    (1100200),
    (
    2100300);

    SELECT AVG(data_fine data_inizio) AS media FROM tabella
    Che tipo MySQL stai utilizzando per le date?

  9. #9
    Forse sono arrivato alla soluzione che volevo...
    codice:
    SELECT cod_cat, cod_sott, COUNT(id_helpdesk) AS numero, priorita, AVG(data_stop) AS media_stop, AVG(data_inizio) AS media_avvio
    FROM mod_helpdesk
    WHERE stato='4'
    GROUP BY cod_cat,cod_sott,priorita
    e poi da PHP mi calcolo la differenza al volo che non è più un problema. Tanto la differenza delle medie dovrebbe essere uguale alla media delle differenze, giusto?
    La fantasía, abandonada de la razón, produce monstruos imposibles; unida con ella es madre de las artes y origen de las maravillas.
    (Francisco Goya)
    ----------------------------------------
    http://www.mangioebevo.it
    http://www.definitives.org

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 © 2024 vBulletin Solutions, Inc. All rights reserved.