Discussione chiusa
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Query con due count

  1. #1
    delfin96 non è in linea Novello
    Post
    3

    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
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,011
    Se non vuoi fare una UNION, puoi fare una sotto-query all'interno della prima.
    Scusa, ma ci spieghi come fanno ad essere diversi i nomi dei campi visto che le tabelle sono le stesse???
    Io non vedo campi diversi...

    P.S. la tua query è sbagliata, sia dal punto di vista logico che sintattico.
    Oltre a questo, a cosa servono i cancelletti (#) prima di WHERE e AND ?

  3. #3
    delfin96 non è in linea Novello
    Post
    3
    Non è che non voglio fare l'union, ma non saprei come farlo. Infatti ripensandoci i campi sono uguali. Potresti darmi almeno un suggerimento come farlo?

    Sì, sò che è sbagliata, era per rendere l'idea tantochè ho commentato il where che è sbagliato.
    Ultima modifica di delfin96; 01-01-2016 21:38 

  4. #4
    L'avatar di gibra
    gibra non è in linea Amanuense
    Luogo
    Breganze (VI)
    Post
    6,011
    La sintassi della UNION è banalissima, dato che non è altro che due query unite:

    select elenco_campi from tabella where codizione
    union
    select elenco_campi from tabella where codizione


    Onestamente non saprei di quale suggerimento hai bisogno.
    Ti sei documentato sulle query di unione?

  5. #5
    delfin96 non è in linea Novello
    Post
    3
    Ho usato la seguente sintassi:

    codice:
    SELECT id_utente, nome_utente, 
    SUM(case when tempo_modifica between 2015-07-01 and 2015-12-31 then 1 else 0 end) 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
    e ora funziona. Grazie.

  6. #6
    L'avatar di sistemista
    sistemista non è in linea Topo di biblioteca
    Luogo
    Prato
    Post
    2,681
    Scusa, ma qui non va bene,nel senso che tu hai messo dei campi fissi di data,ma nel tempo non cambierà il periodo delle date?
    codice:
    between 2015-07-01 and 2015-12-31
    Sono stato nella terra del terrore e dei Vampiri...la transilvania? No!..in Banca.
    A Lupara?Min***a...Tecnologia Sicula è!

  7. #7
    L'avatar di sspintux
    sspintux non è in linea Very Important Person Ultimo blog: Mappa Italia senza le Google API
    Luogo
    Lazio
    Post
    1,578
    Blogs
    20
    Quote Originariamente inviato da delfin96 Visualizza il messaggio
    Ho usato la seguente sintassi:

    ....
    Ciao,

    evidentemente non hai letto il regolamento del forum
    Netiquette - MasterDrive.it Wiki
    ;

    rammenta per il futuro che qui il cross posting selvaggio non è ammesso.

    Query con due count | HTML.it forum
    Ciao sspintux
    ------------------------------------------------------------

    O Santo Protettore dell'informatico quadratico medio, se puoi allontana da me questo cetriolo amaro!
    Azz! ... questo è un grande porck-around; potremmo addirittura farlo passare per una funzionalità avanzata

  8. #8
    L'avatar di +m+
    +m+
    +m+ non è in linea Scribacchino
    Post
    922
    Vedo un pochino diciamo così di "confusione".
    Se effettivamente vuoi i 6 mesi precedenti alla data odierna (come sembra di arguire nel primo post) puoi usare una differenza di date rispetto a NOW
    Secondariamente la SUM col case implica un full scan della tabella (cioè elaborazione di ogni riga), perdendo la possibilità di usare un indice ad alberto sulle date (l'utilità dipende dalla selettività, ovviamente, ma in questo caso è una selezione di tipo RANGE e quindi normalmente è efficiente).


    Se posso dare un consiglio, carica da qualche parte (file host) un dump della tabella (con dei dati non delicati!), e metti l'esempio del risultato che vuoi ottenere, poi è banale darti la soluzione.

  9. #9
    L'avatar di TheTruster
    TheTruster ora è in linea Moderatore Globale Ultimo blog: Mouse Wheel in Visual Basic 6 - ActiveX
    Luogo
    Messina - Italy
    Post
    7,169
    Blogs
    3
    Chiuso per crossposting.

    TheTruster
    Il Crossposting è vietato dalla Netiquette!




Discussione chiusa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi