Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 04/02/2014 17:06:54
- Thomas Williamson
- Membre
[RESOLU] Aide sur une requête
Bonjour,
J'ai la table suivante qui dénombre les forages et des réservoirs par commune (pour les réservoirs, on distingue le nombre suivant le type de réservoir) :
agence | commune | nb_forage | type_reservoir | nb_reservoir
------------+------------------+---------------+--------------------+----------------
1 | 86001 | 2 | 01 | 1
1 | 86002 | 3 | 01 | 1
1 | 86002 | 3 | 02 | 2
2 | 86003 | 1 | 01 | 3
2 | 86003 | 1 | 01 | 3
2 | 86004 | 0 | 02 | 3
Je cherche à calculer le nombre de forages par agence. La requête ci-dessous me renvoie un résultat erroné car elle fait la somme des forages sans tenir compte du fait que certaines communes apparaissent deux fois. Cela paraît inévitable car les réservoirs sont par ailleurs dénombrés suivant le type de réservoir. Ainsi, si j'ai deux types de réservoirs sur une commune, j'ai deux lignes pour cette commune et donc le nombre de forages apparaît deux fois.
SELECT agence, sum(nb_forage) FROM maTable GROUP BY agence ;
Ma question : comment puis-je dénombrer les forages par agence en ne retenant qu'une seule ligne par commune ? Puis-je le faire plus simplement qu'en passant par une table temporaire avec un WITH ?
Merci pour votre aide !
Thomas
Dernière modification par Thomas Williamson (06/02/2014 10:56:01)
Hors ligne
#2 04/02/2014 20:50:10
- SQLpro
- Membre
Re : [RESOLU] Aide sur une requête
Votre demande est logiquement incohérente. En effet, si vous avez le jeu de données suivant, quelle réponse voulez-vous obtenir ?
agence | commune | nb_forage | type_reservoir | nb_reservoir
------------+------------------+---------------+--------------------+----------------
1 | 86001 | 2 | 01 | 1
1 | 86002 | 3 | 01 | 1
1 | 86002 | 3 | 02 | 2
2 | 86003 | 1 | 01 | 3
2 | 86003 | 2 | 01 | 3
2 | 86003 | 1 | 01 | 3
2 | 86004 | 0 | 02 | 3
A +
Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES, Expert langage SQL
Le site sur les SGBD relationnel et langage SQL : http://sqlpro.developpez.com/
Modélisation de données, conseil, expertise, audit, optimisation, tuning, formation
* * * * * Enseignant CNAM PACA, ISEN Toulon, CESI Aix en Provence * * * * *
Hors ligne
#3 04/02/2014 21:03:35
- Thomas Williamson
- Membre
Re : [RESOLU] Aide sur une requête
Bonjour,
Je souhaiterais faire la somme du nombre de forages par agence, en ne retenant qu'une seule ligne par commune (puisque chaque ligne de commune dupliquée comporte le même nombre de forages). Ma question est donc de savoir si cela est possible dans une requête ou s'il convient que je sépare mon jeu de données en traitant séparément les ouvrages et les réservoirs. J'ai l'impression d'être un abruti de première, à la façon dont vous me répondez.
Merci pour votre aide (si j'en vaux la peine).
Thomas
Dernière modification par Thomas Williamson (04/02/2014 21:03:52)
Hors ligne
#4 04/02/2014 23:42:01
- gleu
- Administrateur
Re : [RESOLU] Aide sur une requête
SQLpro a cette façon de répondre tout à fait désagréable qui laisse à penser à tout le monde que lui-même est un génie et le reste du monde des cons sans nom. Je ne crois pas que vous puissiez y faire grand-chose et nous non plus.
Ceci étant dit, sa réponse sur cette discussion ne me paraît pas véritablement insultante. Il est vrai qu'il est difficile de comprendre ce que vous souhaitez obtenir avec le schéma de table que vous proposez. Cependant, si j'ai bien compris, cela me donnerait cette requête :
SELECT agence, commune, sum(nb_forage) FROM maTable GROUP BY agence, commune;
Mais je n'y mettrais pas ma main au feu.
Guillaume.
Hors ligne
#5 05/02/2014 08:45:36
- Thomas Williamson
- Membre
Re : [RESOLU] Aide sur une requête
Bonjour,
Merci pour ton avis... En fait j'aurais voulu idéalement récupérer le nombre de forages par agence, donc un tableau de résultats du genre :
agence ⎪ nb_forage
-----------+-------------
1 ⎪ 23
2 ⎪ 7
3 ⎪ 2
Bon, je me dirige plus vers une séparation de mes jeux de données (forages d'un côté et réservoirs de l'autre)...
Thomas
Hors ligne
#6 05/02/2014 10:29:27
- gleu
- Administrateur
Re : [RESOLU] Aide sur une requête
Dans ce cas, votre première requête semble être bonne... mais vu le résultat présenté, le jeu de données indiqué est faux.
pour mieux vous aider, il faudrait qu'on parte des membres bases. même jeu de données, identification des colonnes importantes, etc.
Guillaume.
Hors ligne
#7 05/02/2014 14:27:11
- damalaan
- Membre
Re : [RESOLU] Aide sur une requête
Bonjour,
En reprenant le jeu de données initial
agence | commune | nb_forage | type_reservoir | nb_reservoir
------------+------------------+---------------+--------------------+----------------
1 | 86001 | 2 | 01 | 1
1 | 86002 | 3 | 01 | 1
1 | 86002 | 3 | 02 | 2
2 | 86003 | 1 | 01 | 3
2 | 86003 | 1 | 01 | 3
2 | 86004 | 0 | 02 | 3
et en s'attachant à l'agence 1 : cela signifie t il que
1-dans la commune 86002 il y a 3 forages avec des réservoirs de type 1 et 3 forages avec des réservoirs de type 2 soit 6 forages pour cette commune?
2- ou cela signifie que l'on a QUE 3 forages sur la commune 86002 avec 2 types de réservoirs? (dans ce cas il y a un souci de modélisation)?
Hors ligne
#8 05/02/2014 15:23:24
- Thomas Williamson
- Membre
Re : [RESOLU] Aide sur une requête
Bonjour,
C'est le 2e scénario qui est bon ! Au passage, je n'ai rien modélisé du tout... Je travaille sur ce tableau que j'ai récupéré. Ma question était juste de savoir si je pouvais sortir ce type de résultat sans avoir à remanier mon tableau. Sinon, je me rends bien compte que la modélisation n'est pas bonne. Existe-t-il une clause associée à un SELECT qui permettrait de faire un regroupement des forages par agence en se basant sur une seule occurrence de chaque commune ?
Thomas
Hors ligne
#9 05/02/2014 15:49:40
- damalaan
- Membre
Re : [RESOLU] Aide sur une requête
en attendant vous pouvez essayer qqc comme ca
select agence, sum(nb_forage)
from
(
select distinct agence, commune, nb_forage
from test
) a
group by agence;
ce qui renvoie :
agence;total forage/agence
1;5
2;1
La sous requete permet d'éliminer les doublons
Hors ligne
#10 05/02/2014 15:53:46
- Thomas Williamson
- Membre
Re : [RESOLU] Aide sur une requête
Merci, je vais essayer ça !
Hors ligne
#11 06/02/2014 10:55:41
- Thomas Williamson
- Membre
Re : [RESOLU] Aide sur une requête
Bonjour,
Test ce matin et ça fonctionne bien. Cela me permet de contourner le problème assez simplement même si je suis bien conscient que la modélisation est mauvaise...
Merci pour votre aide !
Thomas
Hors ligne
Pages : 1