• User Attivo

    [SQL] GROUP BY ... il dominio di un campo email

    il group by ho bisogno di farlo che consideri le e-mail che hanno uguale estensione dopo @, per cui che mi conti quante mail @libero.it, @yahoo.it, @gmail.com, etc. ci sono nel mio database...
    come posso fare?
    grazie!

    Marco


  • User Attivo

    mhm...con sql classico non mi pare si possa fare.
    Se devi farlo in sql server si può fare con T-sql
    Cosa usi?


  • User Attivo

    per ora il database è access, ma potrei migrarlo a sql volendo...
    aspetto illuminazioni, se possibile su entrambe le tecnologie!
    grazie!!

    Marco


  • Moderatore

    E' semplice basta ricordare che all'interno della query SQL si MS Access è possibile utilizzare le funzioni di elaborazione delle stringhe definite in Access stesso. In questo caso:

    
    SELECT first(right(tbl_email.email,len(email)-instr(email,'@'))) AS DOMINIO,
               count(right(tbl_email.email,len(email)-instr(email,'@'))) AS TOTALE
    FROM tbl_email
    GROUP BY right(tbl_email.email,len(email)-instr(email,'@'));
    
    ```Ricordo che:
    1) right(stringa, num_car) restituisce gli ultimi num_car caratteri di una stringa.
    2) len(stringa) restituisce la lunghezza di una stringa
    3) Instr(stringa, 'X') restituisce la posizione della prima occorreza del carattere 'X' all0interno della stringa.
    
    quindi, combinando le funzioni, possiamo ottenere la sottostringa che sta a destra di un carattere fissato (in questo caso la '@') con l'espressione:
      **right(stringa,len(stringa)-instr(stringa,'@')))**
    
    PS: Attento agli apici che all'interno di SQL devono essere singoli.

  • User Attivo

    Non ricordavo che access avesse ste funzioni...è praticamente vbscript.

    Cmq in sql server è molto simile ma non esiste instr ma charindex che fa più o meno la stessa cosa

    select count(contatore) as numero,right(email,len(email)-charindex('@',email)) as dominio_email
    from tuatabella
    group by right(email,len(email)-charindex('@',email))
    

  • User Attivo

    WOW FUNZIONA!!!
    PaoCavo sei fantastico!!!
    Grazie anche a FuSioNmAn,

    Marco


  • Moderatore

    @FuSioNmAn said:

    Non ricordavo che access avesse ste funzioni...è praticamente vbscript.

    Infatti! 😉

    Per avere un'elenco dettagliato di tutte le funzioni definite all'interno dell' SQL di MS Access basta utilizzare il *Generatore di espressioni *attivabile clicckando sulla bacchetta magica (nella barra degli strumenti) dopo aver selezionato il campo su cui si intende operare da "Visualizzazione struttura" della query di selezione:

    image

    :ciauz:


  • User Attivo

    questo è un gran consiglio!!
    non ci avevo pensato!
    grazie!

    Marco