Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2006, 14h23   #1
Futur Membre du Club
 
Inscription : mars 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 79
Points : 15
Points : 15
Par défaut [T-SQL]Utiliser le résusltat d'un count() dans Avg() directement

Bonjour, je suis sur un problème de requête que je n'arrive pas à faire.
Voici la structure de ma table :

table maTable
Champs 1 --> id
Champs 2 --> donnee

voici un exemple de ce que je peux trouver comme type d'enregistrements :

champs 1 | champs 2
----------------------
12455 | 60
12455 | 65
12455 | 72
12454 | 32
12454 | 34
12453 | 18
12453 | 20
12453 | 25
12453 | 35
12453 | 46

Voilà. Pour chaque groupe d'identifiant je voudrais avoir le nombre d'enregistrement par exemple ici pour 12455 il y a 3 enregistrements etc...
Pour cela je fais cette requête :

SELECT count(*) FROM maTable group by id
j'obtient :

id
--
3
2
5

Ce que je n'arrive pas à faire c'est une moyenne sur ce résultat. J'ai essayer ca :

SELECT Avg(SELECT count(*) FROM maTable group by id) FROM maTable

SELECT Avg(nb_id) FROM maTable WHERE nb_id IN (SELECT count(*) as nb_id FROM maTable group by id)

et plein d'autres choses mais j'ai des erreurs de syntaxe

please help !
merci d'avance à bientôt
toto4650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2006, 15h22   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
Est-ce que ceci te convient:

Code :
1
2
3
 
SELECT count(*) FROM TABLE GROUP BY id
compute avg(count(*))
Attention - cette extension T-SQL (le compute) n'est pas compatible avec JDBC, donc ne peux pas être utililsée dans du code Java.

Les alternatives:
Code :
1
2
3
4
5
6
 
-- vue materialisée - requiert 12.5.1
SELECT avg(cnt.c) FROM (SELECT count(*) c FROM TABLE GROUP BY id) cnt
-- table temporaire - toutes les versions:
SELECT c = count(*) INTO #t from table group by id
SELECT avg(c) FROM #t
Michael
__________________
Michael Peppler
Membre de TeamSybase - www.teamsybase.com

"A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2006, 16h12   #3
Futur Membre du Club
 
Inscription : mars 2004
Messages : 79
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 79
Points : 15
Points : 15
Code :
1
2
3
 
SELECT count(*) FROM TABLE GROUP BY id
compute avg(count(*))
ceci ne foncitonne pas, c'est le qui pose problème.
J'ai donc essayé
Code :
1
2
3
 
SELECT count(*) AS nb FROM TABLE GROUP BY id
compute avg(nb)
mais ca ne marche pas non plus.
Par contre le
Code :
1
2
 
SELECT avg(cnt.c) FROM (SELECT count(*) c FROM TABLE GROUP BY id) cnt
foncitonne très bien et très rapidement. Avec la table temporaire ca marche aussi mais mons rapide. Merci donc et bravo !
toto4650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h54.


 
 
 
 
Partenaires

Hébergement Web