Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 11/05/2011, 08h22   #1
Futur Membre du Club
 
Homme seb
Consultant informatique
Inscription : février 2008
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme seb
Âge : 33
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2008
Messages : 34
Points : 16
Points : 16
Par défaut Jointure sur select count

Bonjour,

Code :
1
2
3
 
SELECT * FROM v$version ;
Oracle DATABASE 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
je souhaite réaliser une jointure sur 2 select count mais je ne sais pas si c'est réalisable. Voici mes 2 select :

Code :
1
2
3
4
5
6
 
SELECT count(*) AS nb_rejected, substr(date,8,10) AS YEAR
FROM table1
WHERE datecloture IS NULL
GROUP BY substr(date,8,10)
ORDER BY substr(date,8,10)
Code :
1
2
3
4
5
 
SELECT count(*) AS nb_total, substr(date,8,10) AS YEAR
FROM table1
GROUP BY substr(date,8,10)
ORDER BY substr(date,8,10)
Merci !
pingouinos_64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 08h48   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Code :
1
2
3
4
5
6
7
 
SELECT count(*) AS nb_total, 
       count(Case When datecloture IS NULL Then 1 End) AS nb_rejected,
       substr(date,8,10) AS YEAR
FROM table1
GROUP BY substr(date,8,10)
ORDER BY substr(date,8,10)
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 09h00   #3
Futur Membre du Club
 
Homme seb
Consultant informatique
Inscription : février 2008
Messages : 34
Détails du profil
Informations personnelles :
Nom : Homme seb
Âge : 33
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2008
Messages : 34
Points : 16
Points : 16
Merci !!!
pingouinos_64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 09h01   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Une autre méthode :
Code :
1
2
3
4
5
6
  SELECT count(*)                      AS nb_total
       , count(*) - count(datecloture) AS nb_rejected
       , substr(date, 8, 10)           AS year
    FROM table1
GROUP BY substr(date, 8, 10)
ORDER BY substr(date, 8, 10) ASC;
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 12h42   #5
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
Citation:
substr(date, 8, 10) AS year
Une année sur 10 chiffres, c'est style l'an 1'000'000'001 après Jésus-Christ ?

__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/05/2011, 13h45   #6
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Au passage, si c'est la date est en char, c'est un peu laid...

... et si elle est en date, on préfèrera to_char(date, 'YY')
__________________

(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/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 16h09   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
Citation:
Envoyé par pacmann Voir le message
Au passage, si c'est la date est en char, c'est un peu laid...

... et si elle est en date, on préfèrera to_char(date, 'YY')
Au jeu des Chiffres et des Lettres, je préfère les chiffres

Code :
extract(year FROM date)
à moins bien sûr de vouloir grouper les grand-mères de 1910 avec les filles de 2010
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h36   #8
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Bien vu, surtout que si on tient absolument à tronçonner les grand-mères et les filles, on peut aussi le faire avec mod 100
__________________

(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/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 17h54   #9
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
mouais, mais à condition que les grand-mères ne soient pas trop vieilles, sinon le mod va coincer...

Code :
1
2
SELECT mod(extract(year FROM date '-1910-01-01'),100) FROM dual
-10
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 18h27   #10
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Entre 1910 et 2010, ça fait quand même des bébés en moyenne à 50 ans pour n'être que grand-mère !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h22   #11
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
mais quelle est la différence d'âge entre ta grand-mère et ta fille?

Ma fille a 9 ans et ma grand-mère bientôt 96, ça fait presque un siècle, non
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h23   #12
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Ah ben là Laurent, c'est un dur réveil pour moi qui ai passé 30 ans à croire que le reste de la division Euclidienne est positif !

Sur Wikipedia, l'extension de la division Euclidienne dans Z, ils insistent sur l’existence, et indiquent que l'unicité "ne peut être établie qu'en imposant une condition supplémentaire" puis citent deux cas...
http://fr.wikipedia.org/wiki/Division_euclidienne

Sur un random pdf, ils définissent comme positif le reste de la division Euclidienne d'un entier relatif :
http://www.google.fr/url?sa=t&source...5sCmQS7guvVtMg

Ah ben finalement, c'est bien Oracle qui a implémenté le truc un peu différemment :
This function behaves differently from the classical mathematical modulus function when m is negative. The classical modulus can be expressed using the MOD function with this formula:

m - n * FLOOR(m/n)


http://download.oracle.com/docs/cd/B...nctions088.htm

Du coup Waldar, entre la fille en l'an 10 et la grand-mère en -10, on a l'effet inverse
__________________

(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/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h29   #13
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
on pourrait aussi employer REMAINDER(-1910,100), non? MOD est effectivement une bizarrerie Oracle. En particulier

Code :
1
2
SELECT mod(123,0) FROM dual
123
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h33   #14
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
En tous cas sur le coup du signe du reste, ça donne la même chose chez moi :

Code :
1
2
3
4
5
6
7
 
SQL> SELECT REMAINDER(-1910,100) FROM dual
  2  /
 
REMAINDER(-1910,100)
--------------------
                 -10
Puis pour le coup du 0, c'est le débat entre avoir une requête qui claque ou un résultat arbitraire
__________________

(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/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2011, 09h57   #15
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
je me suis planté ce coup ci ...

j'avais testé avec
Code :
1
2
SELECT REMAINDER(-1990,100) FROM dual
10
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 14h41   #16
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Mouais, j'ai un peu du mal à saisir la doc Oracle quand même :

http://download.oracle.com/docs/cd/B...nctions133.htm
Citation:
Envoyé par Doc Oracle
REMAINDER returns the remainder of n2 divided by n1
...
The MOD function is similar to REMAINDER except that it uses FLOOR in its formula, whereas REMAINDER uses ROUND. Please refer to MOD.
...
If n1 != 0, then the remainder is n2 - (n1*N) where N is the integer nearest n2/n1.

...
Bon donc la doc dit que REMAINDER prend l'arrondi n2/n1 alors que MOD prend le floor ?

Code :
1
2
3
4
5
6
 
SQL> SELECT mod(-1910, 100), -1910 - 100 * floor(-1910 / 100) AS modeuh FROM dual;
 
MOD(-1910,100)     MODEUH
-------------- ----------
           -10         90
Effectivement, vu que dans la description de mod ils disaient justement que MOD ne fonctionne pas comme ça...

Cela dit, je trouve que REMAINDER, c'est vraiment extrêmement laid :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
SQL> SELECT -level a, 5 b, mod(-level, 5) rmod, remainder(-level, 5) rrem, -level - floor(-level / 5) * 5 rmath
  2  FROM dual
  3  connect BY level <= 10;
 
         A          B       RMOD       RREM      RMATH
---------- ---------- ---------- ---------- ----------
        -1          5         -1         -1          4
        -2          5         -2         -2          3
        -3          5         -3          2          2
        -4          5         -4          1          1
        -5          5          0          0          0
        -6          5         -1         -1          4
        -7          5         -2         -2          3
        -8          5         -3          2          2
        -9          5         -4          1          1
       -10          5          0          0          0
 
10 ligne(s) sÚlectionnÚe(s).
Car autant 4 et -1 (-3 et 2; -2 et 3) c'est la même chose vis à vis de Z/Z5, autant le côté miroir induit par le round me semble insupportable ! (question de goût peut être )
__________________

(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/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h47.


 
 
 
 
Partenaires

Hébergement Web