Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Query con due count

  1. #1

    Query con due count

    Ciao a tutti, spero di non aver sbagliato sezione. Sono nuovo su questo forum. Vorrei estrarre da un DB con due tabelle (utenti e modifiche) alcuni dati: ID utente, nome utente, numero di modifiche fatte nei 6 mesi precedenti e numero totale di modifiche effettuate fino a una certa data. Avevo pensato a una cosa così:

    codice:
    SELECT id_utente, nome_utente, COUNT(id_modifica) AS numero_modifiche_6_mesi, COUNT(id_modifica) AS numero_modifiche_totali
    FROM utenti INNER JOIN modifiche
    ON modifiche.id_utente = utenti.id_utente
    #WHERE tempo_modifica < 2015-12-31
    #AND tempo_modifica > 2015-07-01
    GROUP BY nome_utente

    ma non so come faccio a far capire a MySQL che il primo count deve essere inerente solo ai primi 6 mesi (dal 1 luglio 2015 al 31 dicembre 2015) mentre il secondo count deve contare le modifiche in tutto fino a oggi (da sempre - fino al 31 dicembre 2015).


    Avete dei suggerimenti? Pensavo di fare l'union ma non mi convince la cosa perchè i nomi dei campi sono diversi. Grazie in anticipo per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non testato.

    codice:
    SELECT id_utente, nome_utente, 
    SUM(case when tempo_modifica between 2015-07-01 and 2015-12-31 then 1 else 0 end case) AS numero_modifiche_6_mesi, 
    COUNT(id_modifica) AS numero_modifiche_totali
    FROM utenti INNER JOIN modifiche
    ON modifiche.id_utente = utenti.id_utente
    GROUP BY nome_utente
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Purtroppo mi dà errore accanto al CASE: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax.

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ho scritto che non è testato.
    Guarda la documentazione. L'idea é comunque quella. Cioè di fare una somma condizionata.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Grazie, ho seguito le istruzioni, nel codice ho cambiato:

    codice:
    SUM(case when tempo_modifica between 2015-07-01 and 2015-12-31 then 1 else 0 end case) AS numero_modifiche_6_mesi
    con

    codice:
    SUM(case tempo_modifica when tempo_modifica between 2015-07-01 and 2015-12-31 then 1 else 0 end) AS numero_modifiche_6_mesi
    e ora la query funziona ma c'è un problema perchè dà sempre "0" come numero di edit negli ultimi 6 mesi.

    Forse non bisogna sommare i tempi ma gli ID delle modifiche, sbaglio?

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da delfin96 Visualizza il messaggio
    ...... ora la query funziona ma c'è un problema perchè dà sempre "0" come numero di edit negli ultimi 6 mesi. .....
    Quindi non funziona

    Pero la strada proposta da badaze è quella giusta, evita gli Id

    Io che non conosco MySql e anch'io senza testare proverei a togliere il 2° "case"
    quello evidenziato in rosso

    ... SUM(case when ... between ... and ... then 1 else 0 end case) AS numero_modifiche_6_mesi, .......


    Facci sapere


  8. #8
    Come detto nel post precedente: ho tolto il secondo case e la query è stata eseguita correttamente (prima - con il secondo case - dava invece errore).

    IMHO c'è un errore nella somma.

  9. #9
    Ho tolto il primo "tempo_modifica", ora funziona con questa sintassi:


    codice:
    SUM(case when tempo_modifica between 2015-07-01 and 2015-12-31 then 1 else 0 end) AS numero_modifiche_6_mesi
    Grazie a tutti.

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.