|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Bonjour,
je cherche à connaitre le nombre d'enregistrements d'une table à partir de sa clé primaire. Donc en théorie ça revient à faire sauf que dans mon cas, la clé primaire est constituée de 4 colonnes (deux colonnes varchar2 et 2 colonnes number). Et je ne trouve pas d'exemple sur Google pour ce cas de figure. J'ai déjà essayé me renvoie une erreur Citation:
Citation:
Code :
Merci à ceux qui sauront m'expliquer laquelle est bonne et pourquoi. |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Pourquoi pas count(*) ???
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
|
|
10
|
|
|
#3 | ||
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Le résultat est complètement différent entre
Code :
donc j'avoue ne pas savoir |
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Dans quel cas faites vous le count ?
Est-ce sur une table issue d'une jointure externe ? |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
--> va compter (sans distinction de colonnes) le nombre d'enregistrements dans ta table.
Tandis que : --> va faire la somme du nombre d'enregistrement du champ 1 et du nombre d'enregistrement du champ 2.
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Euh non, simplement à des fins de test pour le moment.
On m'a conseillé (vu que ce que je faisais était complètement faux) de récupérer les 4 champs et avec une requête imbriquée de calculer le résultat. comment on fait ça ? |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
Tu n'as pas besoin de t'embêter à récupérer les 4 champs, en effet puisqu'il s'agit de la clé primaire alors pour chaque enregistrement de la table une valeur existe pour tes 4 champs.
Le count(*) suffit largement pour ça.
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Est-ce qu'il y a moyen d'en savoir un peu plus sur la façon dont est géré count(*) par Oracle ? Il doit bien concaténer les champs pour pouvoir compter non ?
Comment est-ce qu'il les concatène ? |
|
|
00
|
|
|
#9 | |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Citation:
un count(*) va compter le nombre d’occurrences que ramène ta requête, indépendamment de la clef primaire ou du nombre de colonnes.
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
|
|
|
00
|
|
|
#10 |
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
mais mais mais
Donc finalement un count(*) simplement me ramènera le nombre de lignes qui ont cette clé primaire ? Et en plus ça règle le problème des doublons étant donné qu'une clé primaire est unique. Et pour une table qui n'a pas de clé primaire ? Comment on peut faire alors pour un count de plusieurs champs pour éviter les doublons ? |
|
|
00
|
|
|
#11 | |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Citation:
Pourrais-tu nous fournir un exemple précis de ce que tu veux avec des tables de testes ou au moins avoir ta requête en entier avec la description des tables, parce que ton besoin initial reste encore assez vague.
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
|
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Erf, je ne suis plus en entreprise la.
Mais de tête : En gros, on a une table de devis (table A) et une table de devis détaillé (table B). Normalement, pour une ligne de la table A, on doit avoir une et une seule ligne dans la table B. Or après test, il se trouve qu'il y a plus de lignes dans la table B que dans la table A. Donc il faut retrouver dans la table A le nombre de lignes pour une période donnée sans doublons (table avec la clé primaire). Et ensuite même chose pour l'autre table qui n'a pas de clé primaire celle la. En fait, je dois faire ça pour retrouver des lignes "en trop" dans la table B qui ne devraient pas y être. Je sais que c'est vague, moi même j'ai un peu de mal à cerner tout le problème. Surtout que ça ne représente qu'une petite partie du projet. |
|
|
00
|
|
|
#13 |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Si c'est un problème de doublon, as-tu lu la note suivante de la FAQ ?
http://oracle.developpez.com/faq/?page=3-1#doublons
__________________
les règles du forum - mode d'emploi du forum Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur) JE NE RÉPONDS PAS aux questions techniques par message privé. Écrire en français sur un forum est une marque minimale de respect. |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 655 ![]() |
Et n'y aurai-t-il pas un problème de modélisation par la même occasion ?
|
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut,
Code :
Pour le count : count(*), c'est le nombre de ligne de : - ton groupe s'il y a un group by - ta requête entière sinon count(expr), c'est le nombre de lignes tout pareil qu'au dessus sauf qu'on ne compte pas les expr NULL ! "Expr" peut être une colonne, ou une expression plus complexe mixant colonnes, d'opérateurs, fonctions, constantes, ... count(DISTINCT expr), c'est le nombre d'occurrences distinctes de ton expr.
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||
|
10
|
|
|
#16 | ||||||||
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Alors, mes requêtes :
Code :
et Code :
La première requête me renvoie 36592 lignes et la deuxième 40645. Donc il y a plus de lignes dans dcf que dans cla. J'ai donc essayé la requête de pacman : Code :
Code :
Y a un truc qui a du m'échapper la, étant donné qu'il y a 4050 lignes de plus dans la deuxième table. |
||||||||
|
|
00
|
|
|
#17 | ||||
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
Bonjour,
Tu n'as peut-être pas bien compris le fonctionnement du having count(*) >1. Il te permet de retourner les lignes telles que leur count est supérieur à 1. Un exemple pour illustrer ça : Code :
Citation:
Citation:
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
||||
|
|
00
|
|
|
#18 | |||
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
OK, je vais m'orienter la dessus.
Code :
Par contre j'ai un message d'erreur : Citation:
|
|||
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() Laure Consultante en Business Intelligence Inscription : avril 2007 Messages : 983 ![]() |
Il me semble que dans oracle (d'après le tuto) il faille utiliser MINUS à la place d'EXCEPT.
P.S : Par contre ici tu ne fais pas juste la différence entre dcf et cla car tes deux tables sont présentes dans tes deux requêtes.
__________________
~ Lola ~ Ne pas oublier : et aussi :
|
|
|
10
|
|
|
#20 |
|
Membre régulier
![]() Nicolas Étudiant Inscription : mai 2010 Messages : 309 ![]() |
Effectivement, avec MINUS, la requête me donne un résultat.
Par contre, la requête me renvoie le nombre de lignes de dcf, non la différence. J'ai testé en enlevant les jointures des select mais j'obtiens un résultat supérieur au nombre de lignes initial de dcf. Lola06, j'ai bien lu ton PS mais il faut bien que je garde les jointures pour être sur de tester les bonnes lignes non ? Comment faire ça alors ? J'affine pour le moment sur le mois de mars et je devrais trouver une différence de 307 lignes normalement. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com