Rechercher : dans
Par :

SQL: COUNT ET Group BY sous Sql Server

Dernière réponse le 11 jui 2008 à 13:59:06 NewbSqlServer, le 10 jui 2008 à 12:59:16 
 Signaler ce message aux modérateurs

Bonjour,
Je suis novice total en Sql Server et j'ai une requête que je n'arrive pas à faire:

SELECT COUNT(cs_service_id), cs_service_id
FROM sessions_informations, consulted_services
WHERE si_start_date >= '2008-05-03 13:40:07' AND si_end_date < '2008-07-12 19:36:07' AND si_called_number='1234' AND sessions_informations.si_session = consulted_services.cs_session GROUP BY cs_service_id

Celle ci marche et me donne bien la somme en groupant par service.
Le problème arrive quand je veux avoir le nom de chaque service qui se trouve dans une troisième table:

SELECT COUNT(cs_service_id), cs_service_id, srv_service_name
FROM sessions_informations, consulted_services, services
WHERE si_start_date >= '2008-05-03 13:40:07' AND si_end_date < '2008-07-12 19:36:07' AND si_called_number='1234' AND sessions_informations.si_session = consulted_services.cs_session AND srv_service_id = cs_service_id GROUP BY cs_service_id, srv_service_name

Là il mouline pendant je ne sais combien de temps.. Ce qui me parait bizzare c'est que j'ai une requête utilisant ces trois même tables où je ne fais pas de COUNT et qui marche très bien en donnant bien le nom de chaque service.

Avez vous une idée ?
Merci d'avance

Meilleures réponses pour « SQL: COUNT ET Group BY sous Sql Server » dans :
Démarrer une base de données avec un data file manquant VoirDémarrer une base de données Oracle avec un data file manquant Se connecter à SQL*DBA ou au Server Manager lancer « shutdown abort » lancer « startup mount » lancer la commande suivante pour remplacer le datafile (exemple …/oradata/temp_01.dbf)...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...

1

BlueMind, le 10 jui 2008 à 14:12:04

Salut,

Tout dépends du temps que ça prend mais c'est bien possible car sans le count il peut lire un record et l'afficher mais avec le count il doit lire tout les records, les compter, afficher le résultat et ensuite passer à un autre couple, etc...
A quoi bon soulever des montagnes quand il est si simple de ­passer par-dessus ?

Répondre à BlueMind

2

NewbSqlServer, le 10 jui 2008 à 15:02:48

Ok.. Donc à priori je n'ai pas moyen de plus optimiser ma requête ?
Parce que si je ne veux pas afficher le nom du service ( uniquement deux tables) bah j'ai un gain de temps considérable mais je dois malheureusement afficher le nom du service donc 3e table.. et la différence de temps est conséquente mais bon ca prend, je dirais 3-4 secondes, mais pour l'instant il n'y a pas un nombre très grand de données..

Répondre à NewbSqlServer

3

 NewbSqlServer, le 11 jui 2008 à 13:59:06

Bon j'ai essayé en faisant une sous requête:

SELECT cs_service_id, srv_service_name
FROM consulted_services, services,
WHERE cs_session IN ( SELECT si_session From sessions_informations WHERE si_start_date >= '2008-05-03 13:40:07' AND si_end_date < '2008-07-12 19:36:07' AND si_called_number='1234') AND srv_service_id = cs_service_id GROUP BY cs_service_id, srv_service_name

J'ai remarqué que sans faire le COUNT et en enlevant le group By, la requête s'executaitt de facon quasi instantannée !!

Et c'est en rajoutant uniquement le GROUP BY ( sans le Count) que la requête met 11 secondes !!!
Quelqu'un pourrait m'expliquer pourquoi ce Group By met autant de temps à s'executer ?? Sachant que sans le group By on remarque qu'il y a uniquement 2 cs_service_id différent !! et seulement 12 lignes de resultats !!

Je désespère..

Merci d'avance pour votre aide

Répondre à NewbSqlServer