aide sur un SELECT [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 11-09-2002 à 13:29:48
je ne pense pas qu'une fonction existe pour faire sa, il faut voir avecde structure conditionnel, ect, mais a mon avis ça seras trop long a executer !
Marsh Posté le 11-09-2002 à 13:36:48
select emplid, count(*) as c from table where c=2 group by emplid
Marsh Posté le 11-09-2002 à 13:37:50
--greg-- a écrit a écrit : select emplid, count(*) as c from table where c=2 group by emplid |
J'en suis pas encore a se niveau !
Marsh Posté le 11-09-2002 à 13:38:22
faudra rebidouiller un peu la requête, mais en gros :
Code :
|
Marsh Posté le 11-09-2002 à 13:38:52
Peut être que la fonction rownum pourrait m'aider mais je connais pas vraiment son utilité (je l'ai vu en me baladant sur le forum à la recherche de l'idée géniale)
Qqn aurait un rapide briefing à me faire dessus ?
Marsh Posté le 11-09-2002 à 13:39:06
MagicBuzz a écrit a écrit : faudra rebidouiller un peu la requête, mais en gros :
|
Marsh Posté le 11-09-2002 à 13:39:10
--greg-- a écrit a écrit : select emplid, count(*) as c from table where c=2 group by emplid |
Ha ouais ? On peut faire la condition direct sur le COUNT
Marsh Posté le 11-09-2002 à 13:39:55
Le Breton a écrit a écrit : Peut être que la fonction rownum pourrait m'aider mais je connais pas vraiment son utilité (je l'ai vu en me baladant sur le forum à la recherche de l'idée géniale) Qqn aurait un rapide briefing à me faire dessus ? |
quoi ça marche pas ma requete?
Marsh Posté le 11-09-2002 à 13:40:12
MagicBuzz a écrit a écrit : Ha ouais ? On peut faire la condition direct sur le COUNT |
oué
Marsh Posté le 11-09-2002 à 13:49:17
--greg-- a écrit a écrit : select emplid, count(*) as c from table where c=2 group by emplid |
Je me prends un invalid column name sur c...
Marsh Posté le 11-09-2002 à 13:54:34
Faut utiliser HAVING:
SELECT emplid
FROM empl_t
GROUP BY emplid
HAVING COUNT(emplid) = 2;
Marsh Posté le 11-09-2002 à 13:55:17
Le niveau du forum a baissé ...
C'est pourtant simple:
select emplid
from table
group by emplid
having count(*)=2
Marsh Posté le 11-09-2002 à 13:59:30
ReplyMarsh Posté le 11-09-2002 à 14:00:39
MagicBuzz a écrit a écrit : faudra rebidouiller un peu la requête, mais en gros :
|
En tout cas, ta solution marche ! Merci
Marsh Posté le 11-09-2002 à 14:01:53
oh les tueurs avec des requetes de fous pour un truc aussi bateau ... m'etonne pas qu'apres ils arrivent avec la bouche en coeur et un "oh ben j'comprends pas, pourquoi ma requete mets 3 heures a s'executer"
Marsh Posté le 11-09-2002 à 14:04:02
thegti a écrit a écrit : Le niveau du forum a baissé ... C'est pourtant simple: select emplid from table group by emplid having count(*)=2 |
C'est en effet plus simple mais merci aux autres pour leur aide et surtout pour la reactivité !
Marsh Posté le 11-09-2002 à 14:41:39
--greg-- a écrit a écrit : oué |
je suis de l'avis de kueger > avec having...
Parceque direct comme ça, je doute que ça marche... tu peux pas faire un filtre sur une donnée calculée dont le résultat peut dépendre du filtre...
pour count, chais pas, je m'en sert jamais. mais pour min() ou max() y'a pas moyen en tout cas.
peut-être avec un having... en tout cas ma méthode marche bien et n'est pas plus lente qu'une autre (selon les indexes qui sont créés )
Marsh Posté le 11-09-2002 à 14:42:22
thegti a écrit a écrit : Le niveau du forum a baissé ... C'est pourtant simple: select emplid from table group by emplid having count(*)=2 |
On ne peut pas etre bon partous
Marsh Posté le 11-09-2002 à 14:52:20
HappyHarry a écrit a écrit : oh les tueurs avec des requetes de fous pour un truc aussi bateau ... m'etonne pas qu'apres ils arrivent avec la bouche en coeur et un "oh ben j'comprends pas, pourquoi ma requete mets 3 heures a s'executer" |
Ouais ma c normal, plus habitué à faire des requêtes toutes simples...
La requête la plus lisible que j'aie dans le projet que je suis en train de faire c'est celle là :
Code :
|
Marsh Posté le 11-09-2002 à 15:48:07
Tu me rappeleras de.................................................................................................. ne pas postuler où to bosses
Marsh Posté le 11-09-2002 à 15:56:11
MagicBuzz a écrit a écrit : je suis de l'avis de kueger > avec having... Parceque direct comme ça, je doute que ça marche... tu peux pas faire un filtre sur une donnée calculée dont le résultat peut dépendre du filtre... pour count, chais pas, je m'en sert jamais. mais pour min() ou max() y'a pas moyen en tout cas. peut-être avec un having... en tout cas ma méthode marche bien et n'est pas plus lente qu'une autre (selon les indexes qui sont créés ) |
Bien sur qu'elle est plus lente ta requête, elle fait 2 passes ...
Marsh Posté le 11-09-2002 à 16:14:34
MagicBuzz a écrit a écrit : je suis de l'avis de kueger > avec having... |
oui, autant pour moi
(pourtant jpense l'avoir déjà fait mais jsais plus avec quelle db)
Marsh Posté le 11-09-2002 à 17:30:19
thegti a écrit a écrit : Bien sur qu'elle est plus lente ta requête, elle fait 2 passes ... |
Peut-être que sous Ingre ou MySQL elle est deux passes, mais sous Oracle ou SQL Server, elle ne fait qu'une passe. Y'a un optimiseur dans les SGBD c'est pas fait pour faire joli
Et deplus, avec des indexes correctement créés, pas une seule ligne de la table n'est lue, donc faire une ou deux passes dans un arbre...
Marsh Posté le 11-09-2002 à 17:48:54
--greg-- a écrit a écrit : oui, autant pour moi (pourtant jpense l'avoir déjà fait mais jsais plus avec quelle db) |
pourquoi tu as dejà utiliser beaucoup de db?
Marsh Posté le 11-09-2002 à 18:01:01
bob20000 a écrit a écrit : pourquoi tu as dejà utiliser beaucoup de db? |
nan pas tant que ça
(je te vois venir toi )
Marsh Posté le 12-09-2002 à 09:30:08
--greg-- a écrit a écrit : nan pas tant que ça (je te vois venir toi ) |
tu as dejà utilise quel base alors?
Marsh Posté le 12-09-2002 à 10:06:42
MagicBuzz a écrit a écrit : Peut-être que sous Ingre ou MySQL elle est deux passes, mais sous Oracle ou SQL Server, elle ne fait qu'une passe. Y'a un optimiseur dans les SGBD c'est pas fait pour faire joli Et deplus, avec des indexes correctement créés, pas une seule ligne de la table n'est lue, donc faire une ou deux passes dans un arbre... |
L'optimiseur, il refait ta requête ?
Tu peut même mettre 10 fois la table dans ton from, le SGBD il optimise tout seul pour faire une seule passe ...
Fait les deux requêtes et affichent les plans d'éxécution, ou mieux encore affichent des temps d'éxécution avec une grosse table, tu verras direct la différence.
Marsh Posté le 12-09-2002 à 13:58:26
bob20000 a écrit a écrit : tu as dejà utilise quel base alors? |
mysql, interbase, oracle, mssql
mais pour ce que j'ai dis plus haut j'ai pê revé aussi
Marsh Posté le 11-09-2002 à 13:27:00
J'ai une table table qui contient des données pour différentes personnes repérées par le champ emplid. Ces emplid peuvent avoir plusieurs enregistrements chacun.
Je cherche à isoler tous les emplid qui ont uniquement 2 lignes dans cette table.
Quelle est la condition qui me permet de spécifier le fait que chaque emplid de table n'a que 2 enregistrements ?
Merci pour votre aide