Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 18/11/2011, 15h19   #1
Membre du Club
 
Inscription : mars 2006
Messages : 333
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 333
Points : 69
Points : 69
Par défaut Problème de Requête (COUNT)

Bonjour,

Cela fait plusieur heures que j essaye de trouver comment effectuer la requete suivante, meme si je suppose qu elle est toute simple :

Ma base de données est une SQLite3 et contient des lignes qui lient des points. Donc un tableau "Links" qui contient notemment:

LinkID, Start_node, End_node

J aimerais pourvoir chercher parmis toutes mes lignes, quelles sont celles qui ne sont reliés a aucunes autres. (Donc Start_node et End_node n'apparaissent qu une fois). Mais j avoue que je galere complet ...

(Ce que je pense savoir faire meme si je comprends pas trop pourquoi ca marche, c'est chercher les lignes qui ont comme point de depart, un point qui n'est le point de depart d aucune autre ligne :

Code :
1
2
3
SELECT start_node_id, Count(start_node_id) FROM links 
GROUP BY start_node_id
HAVING Count(start_node_id)=1
je ne sais pas si ca peut aider)

Merci

Slumpy
Slumpy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 15h32   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
bonjour,


Une piste en passant par des NOT EXISTS :
Code :
1
2
3
4
5
 
SELECT *
FROM t_nod a
WHERE NOT EXISTS (SELECT NULL FROM t_nod b WHERE a.id <> b.id AND a.str_nod = b.str_nod)
AND NOT EXISTS (SELECT NULL FROM t_nod b WHERE a.id <> b.id AND a.end_nod = b.end_nod);
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 15h35   #3
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 446
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 446
Points : 7 545
Points : 7 545
Quelque chose comme ça ?
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
26
27
SELECT  *
FROM    links   lnk
WHERE   NOT EXISTS
        (   SELECT  NULL
            FROM    links   ln1
            WHERE   ln1.start_node  = lnk.start_node
                AND ln1.linkid      <> lnk.linkid 
        )
    AND NOT EXISTS
        (   SELECT  NULL
            FROM    links   ln1
            WHERE   ln1.start_node  = lnk.end_node
                AND ln1.linkid      <> lnk.linkid 
        )
    AND NOT EXISTS
        (   SELECT  NULL
            FROM    links   ln1
            WHERE   ln1.end_node    = lnk.start_node
                AND ln1.linkid      <> lnk.linkid 
        )
    AND NOT EXISTS
        (   SELECT  NULL
            FROM    links   ln1
            WHERE   ln1.end_node    = lnk.end_node
                AND ln1.linkid      <> lnk.linkid 
        )
;
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 15h59   #4
Membre du Club
 
Inscription : mars 2006
Messages : 333
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 333
Points : 69
Points : 69
Arf ça m’énerve, quand je vois la solution je me demande toujours comment j'y ai pas pensé ...

Merci les gars !
Slumpy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 18h29   #5
Membre du Club
 
Inscription : mars 2006
Messages : 333
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 333
Points : 69
Points : 69
Rebonjour,

Je suis a present bloqué sur une autre requete, que je me permets de poster ici puisqu'elle s'applique à la meme table.

Mon probleme est le suivant: J aimerais extraire les lignes dont je suis sur que TOUS les noeuds d'arrivés n'ont qu'un meme noeud de depart ...

Pour etre plus clair, dans l'exemple ci-dessous, je ne voudrais pas que la requete me renvois les lignes du cas numero 2 puisque le noeud end3 a un autre depart que start2, mais me renvois un cas numero 1.



J espere etre clair.

Merci

Slumpy.
Slumpy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/11/2011, 08h53   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
J aimerais extraire les lignes dont je suis sur que TOUS les noeuds d'arrivés n'ont qu'un meme noeud de depart ...
Donc les noeuds d'arrivée ne peuvent avoir au maximum qu'un seul noeud de départ.

1) Quelles sont les fins n'ayant qu'un seul départ ?
Code :
1
2
3
4
SELECT End_node
FROM links
GROUP BY End_node
HAVING COUNT(Start_node) = 1
Cas 1 : end1, end2, end3
Cas 2 : end1, end2

2) Combien de fins ont les départs dont les fins n'ont qu'un seul départ
Code :
1
2
3
4
5
6
7
8
9
10
SELECT l1.Start_node, COUNT(l1.End_node) AS nb_end_node
FROM links l1
INNER JOIN
(
	SELECT End_node
	FROM links
	GROUP BY End_node
	HAVING COUNT(Start_node) = 1
) tmp ON tmp.End_node = l1.End_node
GROUP BY l1.Start_node
Cas 1 : start2, 3
Cas 2 : start2, 2

3) Quels sont les départs dont les fins n'ont qu'un seul départ qui ont un nombre de fins égal à leur nombre de fins n'ayant qu'un seul départ ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT tmp2.Start_node
FROM links l2
INNER JOIN
(
	SELECT l1.Start_node, COUNT(l1.End_node) AS nb_end_node
	FROM links l1
	INNER JOIN
	(
		SELECT End_node
		FROM links
		GROUP BY End_node
		HAVING COUNT(Start_node) = 1
	) tmp ON tmp.End_node = l1.End_node
	GROUP BY l1.Start_node
) tmp2 ON tmp2.Start_node = l2.Start_node
GROUP BY tmp2.Start_node, tmp2.nb_end_node
HAVING COUNT(l2.End_node) = tmp2.nb_end_node
------- départ, nb total de fins, nb de fins n'ayant qu'un seul départ
Cas 1 : s2, 3, 3
Cas 2 : s2, 3, 2 <== éliminé par la requête.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h16.


 
 
 
 
Partenaires

Hébergement Web