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?
Version imprimable
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:
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...Citation:
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 :pCitation:
Comment tu sais qu'un domaine est plus utilisé qu'un autre ?
Voici la table que j'utilise
Code:
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:
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 à coteCode: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:
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
:?Citation:
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:
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 mieux ;)Citation:
Envoyé par gwadakillah
Merci quand meme ;)
et puis j'espère que ça aidera certains qui auront besoin de la même chose ;)