IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Fonction Analytique - Intervalles de count


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par défaut Fonction Analytique - Intervalles de count
    Bonjour,

    Je souhaite obtenir le "count" du nombre de commandes rangés selon 6 intervalles de 100 à 50000, puis 50001 à 100000, etc...

    Pour l'instant j'essaie avec count et partition:
    select
    count( order_total ) over ( partition by order_total / 50000 ) subdivision
    from jbm_orders
    order by subdivision desc
    Mais je ne vois pas comment obtenir ce count.

    Merci pour votre aide

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    Plutôt quelque chose comme ça si je ne m'abuse pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Select Case When object_id < 1000 Then 'Plage 1000'
                When object_id < 2000 Then 'Plage 2000'
                Else 'Plage > 2000' End Obj,
           count(*)
    From all_objects 
    Group by Case When object_id < 1000 Then 'Plage 1000'
                When object_id < 2000 Then 'Plage 2000'
                Else 'Plage > 2000' 
             End

  3. #3
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Hmm, je ne vois pas l'intérêt de faire ce count(*), puisque tu sais que dans ta première partition tu en auras 50 000, dans la deuxième aussi, etc.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    Citation Envoyé par sgora Voir le message
    Hmm, je ne vois pas l'intérêt de faire ce count(*), puisque tu sais que dans ta première partition tu en auras 50 000, dans la deuxième aussi, etc.
    Es tu certain ? T'as testé ?

  5. #5
    Membre éclairé Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par défaut
    Mnitu,

    J'ai réussi avec ton exemple:
    select
    case when order_total < 50000 then 'rank1'
    when order_total between 50001 and 100000 then 'rank2'
    when order_total between 100001 and 150000 then 'rank3'
    when order_total between 150001 and 200000 then 'rank4'
    when order_total between 200001 and 250000 then 'rank5'
    when order_total between 250001 and 300000 then 'rank6'
    end fourchette,
    count(*)
    from jbm_orders
    group by case when order_total < 50000 then 'rank1'
    when order_total between 50001 and 100000 then 'rank2'
    when order_total between 100001 and 150000 then 'rank3'
    when order_total between 150001 and 200000 then 'rank4'
    when order_total between 200001 and 250000 then 'rank5'
    when order_total between 250001 and 300000 then 'rank6'
    end
    order by 1
    Mais je continue à tester le tuto sur les fonctions analytiques pour trouver un select plus court.

    Merci beaucoup.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ça n'a strictement rien à voir avec les fonctions analytiques.
    C'est un petit calcul mathématique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      select 'rank' || to_char(ceil(order_total / 50000)) as fourchette,
             count(*)
        from jbm_orders
    group by to_char(ceil(order_total / 50000))
    order by fourchette asc;

  7. #7
    Membre éclairé Avatar de Jean_Benoit
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 499
    Par défaut
    Merci beaucoup Waldar, en effet c'est beaucoup plus concis comme ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Fonctions analytiques] - Clause Where / Having
    Par jacquesh dans le forum Oracle
    Réponses: 5
    Dernier message: 06/10/2006, 13h29
  2. [Fonctions analytiques] : inhibe les indexs ?
    Par PpPool dans le forum Oracle
    Réponses: 18
    Dernier message: 20/04/2006, 18h22
  3. Réponses: 3
    Dernier message: 24/11/2005, 12h19
  4. Réponses: 7
    Dernier message: 21/11/2005, 14h21
  5. Réponses: 4
    Dernier message: 18/08/2005, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo