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

Langage SQL Discussion :

sum() d'un sum()


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Editeur de solution de gestion
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Editeur de solution de gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut sum() d'un sum()
    Bonjour,
    es-t'il possible d'imbriquer des sum() ?

    Je m'explique, j'ai une table de tarif dynamique qui ne contient que des valeurs ou coefficient à appliquer à une autre table tarif plus classique.
    Ainsi pour avoir le prix d'un produit, je récupère la table tarif de base + la table tarif dynamique et je fais les calcul en PHP
    ex: ((((prix de base+ valeur)/coef)+valeur2)/coef2).

    Mais si je veux récupérer une fourchette de produit entre un prix de tarif A et B, je ne peux le faire en php car il faudrait que je descende toute la table !
    Je voudrais donc faire un between dans ma requête mais je n'arrive pas à imbriquer les sum entre eux (en gros appliquer un sum au résultat d'un autre sum).

    Mon SGBD est Ingres 10...

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 286
    Points : 12 991
    Points
    12 991
    Par défaut
    Bonjour,
    Je ne suis pas sûr d'avoir tout compris, mais pourquoi ne pas utiliser une sous-requête ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select col1,sum(va1)
    from
    (
    select MaCol1 as col1, sum(col2) as val1
    from MaTable
    where ...
    group by macol1
    )
    group by col1
    Bon ici la sous-requête ne sert à rien, mais c'est pour l'exemple...

    Tatayo.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Encore plus simple avec une foncion de fenêtrage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select col1, sum(col2), sum(sum(col2)) OVER()
    from MaTable
    group by macol1
    A lire sur les fonction de fenêtrage :
    http://sqlpro.developpez.com/article...clause-window/

    A +

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Editeur de solution de gestion
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Editeur de solution de gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Effectivement le fenêtrage semble plus correspondre.
    Je vais regarder cela de plus prêt.

    Il faudrait que je puisse l'utiliser dans un WHERE ou au pire un Having puisque je veux récuperer tous les prix calculés entre 2 valeurs.

    Merci à vous.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Un calcul d'agrégat ne peut être utilisé dans un WHERE, mais il peut être utilisé dans un HAVING.
    En sus un calcul fenêtré ne peut pas du tout être utilisé dans la requête qui l'a produit. Il faut une sous requête...

    A +

Discussions similaires

  1. SUM(CASE) ou SUM(IF)
    Par cbernard dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2014, 10h18
  2. requete SQL SUM d'une Sum
    Par guigui69 dans le forum Développement
    Réponses: 24
    Dernier message: 28/03/2011, 18h54
  3. Soustraire le résultat d'un SUM à un autre SUM
    Par tantemay dans le forum Langage SQL
    Réponses: 7
    Dernier message: 18/10/2010, 15h27
  4. Variations sur NULL, ou SUM(X+Y) <> SUM(X) + SUM(Y) ?
    Par fsmrel dans le forum Langage SQL
    Réponses: 25
    Dernier message: 13/03/2008, 11h48
  5. [Mysql] SUM(planetes.u11) + SUM(attaques.u11) == NULL ?
    Par dark_vidor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/03/2006, 22h51

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