IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[T-SQL]Requete 100 domaines les plus utilisées


Sujet :

MS SQL Server

  1. #1
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut [T-SQL]Requete 100 domaines les plus utilisées
    J'essaye de faire une requête qui me récupèrerais les 100 domaines mails les plus utilisées dans ma base de données.
    Quelqu'un pourrait m'aider?

  2. #2
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT  SUBSTRING(E_MAIL, 1 + CHARINDEX('@', E_MAIL), LEN(E_MAIL) -
    CHARINDEX('@', E_MAIL)) AS domaine
    FROM  PERSONNE
    WHERE E_MAIL IS NOT NULL AND E_MAIL != ''
    Je viens de faire cette requete qui me permet de récupérer tous les domaines mails de ma base mais j'aimerais affiner ma requete pour récupérer les 100 domaines les plus utilisées...
    Merci d'avance de votre aide

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par gwadakillah
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT  SUBSTRING(E_MAIL, 1 + CHARINDEX('@', E_MAIL), LEN(E_MAIL) -
    CHARINDEX('@', E_MAIL)) AS domaine
    FROM  PERSONNE
    WHERE E_MAIL IS NOT NULL AND E_MAIL != ''
    Je viens de faire cette requete qui me permet de récupérer tous les domaines mails de ma base mais j'aimerais affiner ma requete pour récupérer les 100 domaines les plus utilisées...
    Merci d'avance de votre aide
    Faudrait qu'on aie des infos...

    Comment tu sais qu'un domaine est plus utilisé qu'un autre ? Donne nous la structure de ta table qu'on puisse voir ce qu'on peut faire.

  4. #4
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    Comment tu sais qu'un domaine est plus utilisé qu'un autre ?
    En fait je récupères dans la table PERSONNE l'adresse ( E_MAIL ) de tous les personnes contenues dans ma base et c'est à partir de ce champ email que je veux savoir les 100 domaines les plus utilisées dans ma base de données et non en général :p

    Voici la table que j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    CREATE TABLE [dbo].[PERSONNE] (
        [ID_PERSONNE] [numeric](9, 0) IDENTITY (1, 1) NOT NULL ,
        [ID_TITRE] [int] NOT NULL ,
        [ID_DOSSIER] [numeric](8, 0) NULL ,
        [ID_ADRESSE] [numeric](18, 0) NULL ,
        [TITRE] [nvarchar] (30) COLLATE French_CI_AS NULL ,
        [NOM_PERSONNE] [nvarchar] (100) COLLATE French_CI_AI NOT NULL ,
        [PRENOM_PERSONNE] [nvarchar] (100) COLLATE French_CI_AI NOT NULL ,
        [SOCIETE] [nvarchar] (50) COLLATE French_CI_AS NULL ,
        [TELEPHONE_1] [nvarchar] (20) COLLATE French_CI_AS NULL ,
        [TELEPHONE_2] [nvarchar] (20) COLLATE French_CI_AS NULL ,
        [TELECOPIE] [nvarchar] (20) COLLATE French_CI_AS NULL ,
        [E_MAIL] [nvarchar] (100) COLLATE French_CI_AS NULL ,
        [E_MAIL_VALIDE] [bit] NOT NULL ,
        [DATE_NAISSANCE] [smalldatetime] NULL ,
        [SALARIE] [bit] NULL ,
        [ID_ACTIVITE] [nchar] (1) COLLATE French_CI_AS NULL ,
        [RELANCE_EMAIL] [bit] NULL ,
        [E_MAIL_DATE_VALID] [datetime] NULL ,
        [IS_VALIDATION_WEB] [bit] NULL ,
        [IS_ORGANISATEUR] [bit] NOT NULL ,
        [IS_BENEFICIAIRE] [bit] NOT NULL 
    ) ON [PRIMARY]
    GO

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Si je comprends bien tu aimerais compter et récupérer les 100 domaines d'adresses email les plus utilisés dans ta base ?

  6. #6
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    exactement et par ordre décroissant

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Et voilà le travail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT TOP 100 DISTINCT SUBSTRING(E_MAIL, 1 + CHARINDEX('@', E_MAIL), LEN(E_MAIL) -
    CHARINDEX('@', E_MAIL)) AS domaine, count(*) nb
    FROM  PERSONNE
    WHERE E_MAIL IS NOT NULL AND E_MAIL != ''
    GROUP BY E_MAIL
    ORDER BY nb DESC

  8. #8
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    je l'ai deja fait ça mais j'ai ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Incorrect syntax near the keyword 'DISTINCT'.
    Il n'aime pas le TOP 100 et le DISTINCT cote à cote

  9. #9
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Enlève le distinct, ca marche la même chose

  10. #10
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    Si j'enlève le DISTINCT, il me fait n'importe quoi...

    J'ai réussi à le faire en plusieurs étapes en passant par des tables temporaires.Ce n'est pas très optimisé mais ça fonctionne et comme je n'ai pas l'intention d'utiliser cette requête tout le temps donc ça me convient.
    Je vous la mets si ça vous intéresse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    CREATE PROCEDURE GET_TOP100_DOMAINE
    AS
    CREATE TABLE #TMP_DOMAINE(DOMAINE varchar(255),OCCURENCE int)
    INSERT INTO #TMP_DOMAINE
    SELECT DISTINCT SUBSTRING(E_MAIL, 1 + CHARINDEX('@', E_MAIL), LEN(E_MAIL) -
    CHARINDEX('@', E_MAIL)) domaine, count(E_MAIL) nb
    FROM  PERSONNE
    WHERE E_MAIL IS NOT NULL AND E_MAIL != ''
    GROUP BY E_MAIL 
    ORDER BY nb DESC
    CREATE TABLE #TMP_DOMAINE1(DOMAINE varchar(255),OCCURENCE int)
    INSERT INTO #TMP_DOMAINE1
    SELECT DOMAINE, SUM(OCCURENCE) as nb FROM #TMP_DOMAINE
    GROUP BY DOMAINE
    ORDER BY nb DESC
    SELECT TOP 100 DOMAINE FROM #TMP_DOMAINE1
    DROP TABLE #TMP_DOMAINE
    DROP TABLE #TMP_DOMAINE1

  11. #11
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par gwadakillah
    Si j'enlève le DISTINCT, il me fait n'importe quoi...


    Chez moi, ca marche sans distinct, j'ai pas mis beaucoup de données, mais ca marche quand même

    Tu utilises bien cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT TOP 100
    	SUBSTRING(E_MAIL, 1 + CHARINDEX('@', E_MAIL), LEN(E_MAIL) -CHARINDEX('@', E_MAIL)) AS domaine, 
    	count(*) nb
    		FROM  PERSONNE
    		WHERE E_MAIL IS NOT NULL AND E_MAIL != ''
    		GROUP BY E_MAIL
    		ORDER BY nb DESC
    ?

    C'est quoi que tu appelles n'importe quoi ?

  12. #12
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    ce que j'appelles n'importe quoi, c'est qu'il me récupères par exemple !

    1000 enregistrements @gmail.com
    10 enregistrements @hotmail.com
    50 enregistrements @hotmail.fr
    puis me retrouve
    2enregistrements @hotmail.com
    1enregistrement @gmail.com

    Il ne me merge pas tout par domaine...

  13. #13
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par gwadakillah
    ce que j'appelles n'importe quoi, c'est qu'il me récupères par exemple !

    1000 enregistrements @gmail.com
    10 enregistrements @hotmail.com
    50 enregistrements @hotmail.fr
    puis me retrouve
    2enregistrements @hotmail.com
    1enregistrement @gmail.com

    Il ne me merge pas tout par domaine...
    Oki, mais c'est quand même bizarre, mais si ta requête à toi marche tant mieux

  14. #14
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    Merci quand meme
    et puis j'espère que ça aidera certains qui auront besoin de la même chose

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Explorer table sql et récupérer mot les plus fréquent.
    Par rupileos dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2010, 13h38
  2. Requete récupérer les 3 numéros les plus grands
    Par nerick dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/01/2006, 13h51
  3. [SQL] requetes inbriquées un peu plus complexe.
    Par Devil666 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2005, 11h06
  4. [VB6] Comment lister les serveurs SQL d'un domaine ?
    Par WOLO Laurent dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/01/2004, 08h49
  5. Réponses: 3
    Dernier message: 28/11/2003, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo