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 :

Aide pour requête AVG


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Par défaut Aide pour requête AVG
    Bonjour,

    J'ai réussi de mettre en place la requête MAX:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select max(to_char(RESPONSETIME)), to_char(STARTTIME,'HH24') from TAB_PROCLOG_CSO PARTITION(PROCLOG_CSO_20120815)
    Mais j'ai encore des problèmes pour avoir la requête AVG.
    Vous pouvez m'aider de changer cette requête afin d'avoir l'AVG

    STARTTIME NOT NULL TIMESTAMP(6)
    RESPONSETIME NOT NULL INTERVAL DAY(2) TO SECOND(6)

    Merci

  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
    Utilisez Avg. Affichez la requête et le message d'erreur si vous avez des problèmes.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Utilisez Avg. Affichez la requête et le message d'erreur si vous avez des problèmes.
    Merci pour vos reponse
    voici la requête et le message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select AVG(to_char(RESPONSETIME)),
      2  to_char(STARTTIME,'HH24')
      3   from TAB_PROCLOG_CSO PARTITION(PROCLOG_CSO_20120815);
    to_char(STARTTIME,'HH24')
            *
    ERROR at line 2:
    ORA-00937: not a single-group group function
    J'ai trouve ce commentaire dans u autre site:
    Pour effectuer une opération d'AVG sur un DATETIME, vous devez d'abord convertir le DATETIME pour une valeur décimale, effectuer l'agrégation

    Merci de m'aider

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    La toute première requête avec le max renverra la même erreur.
    On ne peut pas afficher une donnée et une fonction de groupe si on ne groupe pas la requête par cette donnée (il y a quelques exceptions)

    Il faut donc rajouter un GROUP BY

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 74
    Par défaut
    Citation Envoyé par McM Voir le message
    La toute première requête avec le max renverra la même erreur.
    On ne peut pas afficher une donnée et une fonction de groupe si on ne groupe pas la requête par cette donnée (il y a quelques exceptions)

    Il faut donc rajouter un GROUP BY
    Oui McM
    j'utilise GROUP BY avec le MAX

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select max(to_char(RESPONSETIME)), to_char(STARTTIME,'HH24') from TAB_PROCLOG_CSO PARTITION(PROCLOG_CSO_20120815)
    where FULLOPERATION like '%:BSCSSV:%' group by to_char(STARTTIME,'HH24') order by to_char(STARTTIME,'HH24');
    Mais je ne trouve pas comment faire le AVG pour la meme requête

  6. #6
    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
    AVG returns average value of expr.

    This function takes as an argument any numeric data type or any nonnumeric data type that can be implicitly converted to a numeric data type. The function returns the same data type as the numeric data type of the argument.

  7. #7
    Membre Expert Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Par défaut
    Bonjour,

    Il faut utiliser un GROUP BY avec une fonction min, max, avg, ...

    le to_char converti en chaine de caractère et non en décimal comme tu le sous-entend.

  8. #8
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Par défaut
    Citation Envoyé par makin_toch Voir le message
    select max(to_char(RESPONSETIME)), to_char(STARTTIME,'HH24') from TAB_PROCLOG_CSO PARTITION(PROCLOG_CSO_20120815)
    Un max sur une chaîne ?
    C'est vraiment ce que vous voulez faire ?

    Oracle ne va pas recaster dans l'autre sens pour faire le max d'ailleurs ?
    Edit : en fait non, il semblerait que ça renvoie le dernier élément après tri par ordre alphabétique : http://www.java2s.com/Tutorial/Oracl...ithstrings.htm

  9. #9
    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
    Citation Envoyé par FSiebert Voir le message
    Un max sur une chaîne ?
    C'est vraiment ce que vous voulez faire ?
    En soit, un max sur une chaîne ne pose pas de problème particulier.
    Par contre je doute également que c'est ce que makin_toch souhaite faire.

    Citation Envoyé par makin_toch Voir le message
    J'ai trouve ce commentaire dans u autre site:
    Pour effectuer une opération d'AVG sur un DATETIME, vous devez d'abord convertir le DATETIME pour une valeur décimale, effectuer l'agrégation
    Il va falloir aiguiser votre sens des recherches, le type DATETIME n'existant pas chez Oracle (le type c'est DATE).
    De plus, votre colonne RESPONSE_TIME est de type INTERVAL.

    Par contre, ce qui est préconisé est néanmoins valable.

    Je ne vois pas tellement ce qui empêche Oracle de proposer nativement des possibilités de calculs sur les intervalles d'ailleurs, peut-être la gestion de plusieurs précisions pour ce type ?

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

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  2. [SQL] Aide pour requête
    Par portu dans le forum Access
    Réponses: 8
    Dernier message: 23/09/2005, 13h05
  3. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  4. [sqlbaseserver]demande de conseils/aides pour requêtes
    Par GéniuS77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 18/03/2004, 17h27
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 20h18

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