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 :

Comment integrer une sous requete?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Par défaut Comment integrer une sous requete?
    Bonjour à tous,

    Je travaille sur une base de donnée issue de mon sote de vente en ligne. Afin de connaitre au mieux le comportement de mes clients, je créé quelques requetes.

    Ma demande est un peu longue mais j ai essayé d etre le plus clair possible...

    J'ai créé une requete pour connaitre le nombre de commandes par client avec le CA total correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COUNT( * ) AS nb_cde, sum( `order_total` ) AS CAtot, oder.`user_id` , user.last_name, user.zip, oder.`order_total` , oder.`order_status`
    FROM jos_vm_orders oder, jos_vm_user_info user
    WHERE order_status = "E"
    AND oder.user_id = user.user_id
    GROUP BY oder.user_id
      ORDER BY `nb_cde`  DESC, CAtot DESC
    Jusque la tout va bien

    Maintenant je souhaite faire l'analyse sur un mois en question

    Les informations se trouvent sur la table jos_vm_order_history constituée des champs suivants :
    - order_id (la jointure avec la table jos_vm_order),
    - order_status_code (code commande qui doit etre egal à E pour etre valide ie commande envoyée)
    - date_added (la date)

    J'inclus donc la requete dans la clause where :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     SELECT COUNT( * ) AS nb_cde, sum( `order_total` ) AS CAtot, oder.`user_id` , user.last_name, user.zip, oder.`order_total` , oder.`order_status`
    FROM jos_vm_orders oder, jos_vm_user_info user, jos_vm_order_history hist
    WHERE order_status = "E"
    AND oder.user_id = user.user_id
    AND hist.order_id = oder.order_id
    AND hist.order_status_code = "E"
    AND hist.date_added
    BETWEEN '2008-04-01 00:00:00'
    AND '2008-04-30 23:59:59'
    GROUP BY oder.user_id
    ORDER BY `nb_cde` DESC , CAtot DESC
    Le problème : quand un user_id a passé plusieures commandes, la requete prend l'ensemble des order_id s'il y a au moins un order_status_code egal à E.

    Cause : la clause group BY englobe les l'ensemble des order_status_code

    Il faudrait donc que je lance la requete sur la table jos_vm_order_history en dehors de la claude Group BY : comment faire?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    La clause GROUP BY doit reprendre toutes les colonnes retournées par la requête qui ne font pas l'objet d'une fonction de regroupement.
    Quel est ce SGBD que tu utilises et qui ne respecte pas la syntaxe des commandes SQL ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 33
    Par défaut
    j utilise mysql et mon open source de boutique en ligne est joomla virtuemart

    il n y a donc pas d'issue? des lors que l on met un group by, on ne peut effectuer de requete avant cette clause?

Discussions similaires

  1. Comment éviter un FULL SCAN au niveau d'une sous requete
    Par ora_home dans le forum Administration
    Réponses: 1
    Dernier message: 07/09/2014, 18h19
  2. comment je peux passer un parametre a une sous requete
    Par boulhous dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/01/2010, 11h10
  3. Réponses: 15
    Dernier message: 14/04/2006, 15h34
  4. Besoin d'aide pour une sous requete
    Par Celia1303 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 14h09
  5. Requete avec une sous-requete... Ne fonctionne qu'a moitie..
    Par mythtvtalk.com dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 18/08/2003, 09h54

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