Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1444 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SELECT et COUNT avec postgres avec INTERSECTION

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

SELECT et COUNT avec postgres avec INTERSECTION

n°2083738
grundoc
Posté le 21-06-2011 à 23:27:33  profilanswer
 

je suis entrain de mettre au point une requête SQL mais j'ai un problème pour compter les éléments d'une intersection :

 
Code :
  1. (SELECT (id) FROM ifepsa.etudiant , ifepsa.resultats WHERE
  2. sexe = 1 AND id=id_etudiant AND semestre='S1' AND niveau='L1' AND annee='2007-2008')
  3. INTERSECT
  4. (SELECT (id) FROM ifepsa.etudiant , ifepsa.resultats WHERE
  5. sexe = 1 AND id=id_etudiant AND semestre='S1' AND niveau='L1' AND annee='2006-2007')

 

Cette requête fonctionne mais je n'arrive pas à l'appliquer avec un COUNT, mais es possible ?

 

La requête sera lancée d'un programme java, donc au pire je renvoie la liste des id et la compte dans mon programme mais je trouve cela beaucoup moins propre.

 

Je suis sur PostGresSQL.

 

Si vous avez quelques avis ou conseils, je suis preneur ;).

 

En vous remerciant :jap:


Message édité par grundoc le 23-06-2011 à 14:19:48

---------------
Mes vente
mood
Publicité
Posté le 21-06-2011 à 23:27:33  profilanswer
 

n°2084728
grundoc
Posté le 24-06-2011 à 16:53:44  profilanswer
 

j'ai finalement contourné le problème en comptant le nombre de résultats de mon resultset dans le code java.
 
Si quelqu'un une autre solution ça m'intéresse. ;)


---------------
Mes vente
n°2084742
skeye
Posté le 24-06-2011 à 17:07:44  profilanswer
 

Un truc de ce genre devrait fonctionner :

Code :
  1. SELECT count(id) FROM
  2. ((SELECT (id) FROM ifepsa.etudiant , ifepsa.resultats WHERE
  3. sexe = 1 AND id=id_etudiant AND semestre='S1' AND niveau='L1' AND annee='2007-2008')
  4. INTERSECT
  5. (SELECT (id) FROM ifepsa.etudiant , ifepsa.resultats WHERE
  6. sexe = 1 AND id=id_etudiant AND semestre='S1' AND niveau='L1' AND annee='2006-2007'))



---------------
Can't buy what I want because it's free -
n°2084744
skeye
Posté le 24-06-2011 à 17:11:22  profilanswer
 

...et après réelle lecture de ta requête, il y a nettement plus simple, a priori:

 
Code :
  1. SELECT count(id)
  2. FROM ifepsa.etudiant etd
  3.     JOIN ifepsa.resultats res1 ON (res1.id_etudiant = etd.id AND sexe = 1 AND semestre='S1' AND niveau='L1' AND annee='2007-2008')
  4.     JOIN ifepsa.resultats res2 ON (res2.id_etudiant = etd.id AND sexe = 1 AND semestre='S1' AND niveau='L1' AND annee='2006-2007')


Message édité par skeye le 24-06-2011 à 17:12:25

---------------
Can't buy what I want because it's free -
n°2084750
grundoc
Posté le 24-06-2011 à 17:16:07  profilanswer
 

PostGre me renvoie l'erreur suivant :
 
ERREUR:  la sous-requête du FROM doit avoir un alias
LINE 24: ((SELECT T(id) FROM ifepsa.etudiant, ifepsa.resultats WHERE
         ^
HINT:  Par exemple, FROM (SELECT...) [AS] quelquechose.
 
Il semble que FROM doit se référer à autre chose que la recherche, peut être qu'en donnant des noms à mes deux SELECT cela pourrait marché.


---------------
Mes vente
n°2084753
skeye
Posté le 24-06-2011 à 17:18:38  profilanswer
 

Oui, ça dépend du SGBD, ça...mais ma deuxième solution doit passer un peu partout.:D


---------------
Can't buy what I want because it's free -
n°2084762
grundoc
Posté le 24-06-2011 à 17:28:58  profilanswer
 

Le deuxième ne marche pas non plus.
 
En faite, je doit compter les id des étudiant (table étudiant) si il sont présent en L1 une année et en L1 l'année suivante.
Leur id est présent dans la table etudiant, et id_etudiant de la table resultats réfère à un id de la table etudiant, je vous montre le code de la génération de ces deux tables :
 

Code :
  1. CREATE TABLE ifepsa.etudiant(
  2. id integer,
  3. sexe integer,
  4. ville_lycee CHAR (60),
  5. dpt_lycee integer,
  6. serie_bac CHAR (35),
  7. pcs_pere CHAR (2),
  8. pcs_mere CHAR (2),
  9. PRIMARY KEY (id)
  10. );
  11. CREATE TABLE ifepsa.resultats(
  12. id_etudiant integer,
  13. annee CHAR(9),
  14. id_cursus integer,
  15. libelle_cursus CHAR(100) NOT NULL,
  16. niveau CHAR(10) NOT NULL,
  17. section CHAR(60) NOT NULL,
  18. boursier boolean,
  19. annulation CHAR (100),
  20. semestre CHAR (10) NOT NULL,
  21. parcours CHAR (35),
  22. session1 boolean,
  23. session2 boolean,
  24. PRIMARY KEY (id_etudiant,annee,semestre),
  25. FOREIGN KEY(id_etudiant) REFERENCES ifepsa.etudiant(id),
  26. FOREIGN KEY(id_cursus) REFERENCES ifepsa.diplome(id) ON UPDATE CASCADE
  27. );

Message cité 1 fois
Message édité par grundoc le 24-06-2011 à 17:32:22

---------------
Mes vente
n°2084771
skeye
Posté le 24-06-2011 à 17:44:31  profilanswer
 

grundoc a écrit :

Le deuxième ne marche pas non plus.


 
Quelle est le message?
 

grundoc a écrit :


En faite, je doit compter les id des étudiant (table étudiant) si il sont présent en L1 une année et en L1 l'année suivante.


ça j'avais compris...:D


---------------
Can't buy what I want because it's free -
n°2084772
grundoc
Posté le 24-06-2011 à 17:46:42  profilanswer
 

Voila l'erreur :
 
ERREUR:  la référence à la colonne « semestre » est ambigu
LINE 26: ...s2 ON (res2.id_etudiant = etd.id AND sexe = 1 AND semestre='...
 
Merci beaucoup pour votre aide.


---------------
Mes vente
n°2084774
skeye
Posté le 24-06-2011 à 18:10:53  profilanswer
 

C'est pas bien compliqué à corriger ça, il suffit de préfixer par le nom de la table ou son alias à chaque fois...


---------------
Can't buy what I want because it's free -
mood
Publicité
Posté le 24-06-2011 à 18:10:53  profilanswer
 

n°2084799
grundoc
Posté le 24-06-2011 à 19:45:47  profilanswer
 

Merci , ça marche du tonner !
 


---------------
Mes vente
n°2084813
skeye
Posté le 24-06-2011 à 20:49:19  profilanswer
 

Maintenant il te reste à comprendre pourquoi...;)


---------------
Can't buy what I want because it's free -

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  SELECT et COUNT avec postgres avec INTERSECTION

 

Sujets relatifs
SQL, select, count et optimisationselect insensible à la casse
SELECT MIN() avec le bon identifiantchanger un simple select en multiselect
différence entre poll et selectCount et somme
Intersection de formesZone de liste déroulante <select></select>
Equivalent du SELECT de MySQL en PHP/XML? Extraire une donnée spécifiq 
Plus de sujets relatifs à : SELECT et COUNT avec postgres avec INTERSECTION


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR