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?
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?
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...
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 != ''
Merci d'avance de votre aide![]()
Faudrait qu'on aie des infos...Envoyé par gwadakillah
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.
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 :pComment tu sais qu'un domaine est plus utilisé qu'un autre ?
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
Si je comprends bien tu aimerais compter et récupérer les 100 domaines d'adresses email les plus utilisés dans ta base ?
exactement et par ordre décroissant
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![]()
je l'ai deja fait ça mais j'ai ce message d'erreur :
Il n'aime pas le TOP 100 et le DISTINCT cote à cote
Code : Sélectionner tout - Visualiser dans une fenêtre à part Incorrect syntax near the keyword 'DISTINCT'.
Enlève le distinct, ca marche la même chose![]()
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
Envoyé par gwadakillah
![]()
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 ?
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 mieuxEnvoyé par gwadakillah
![]()
Merci quand meme
et puis j'espère que ça aidera certains qui auront besoin de la même chose![]()
Partager