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

Requêtes MySQL Discussion :

Remplacement d'une vue


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut Remplacement d'une vue
    Bonjour,

    J'utilise mysql et une partie de mon schéma est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE `client` (
      `clinum` bigint(20) NOT NULL,
      `clinom` varchar(20) NOT NULL,
      `cliadr` varchar(30) NOT NULL,
      `clivil` varchar(20) NOT NULL,
      PRIMARY KEY (`clinum`)
    )
     
    CREATE TABLE  `commande` (
      `comnum` bigint(20) NOT NULL,
      `comdat` date NOT NULL,
      `clinum` bigint(20) NOT NULL,
      PRIMARY KEY (`comnum`)
    )
    Je dispose d'une vue consistant à déterminer le client ayant émis le plus grand nombre de commande.
    Cependant, je dois absolument trouver une alternative à la vue suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create view nbcomcli
    (num, nbre)
    as select clinum, count(*)
    from commande
    group by clinum
    Ensuite j'utilise la vue afin de déterminer le client ayant passer le plus grand nombre de commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select clinum, clinom, nbre
    from client, nbcomcli
    where clinum = num and nbre = (select max(nbre) from nbcomcli)
    **************

    J'ai essayé ce code sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select clinum, clinom, max(nb)  from 
    (select clinum, count(*) from commande group by clinum) as nb
    from client
    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 161
    Par défaut
    Tu n'as même pas besoin d'utiliser une vue pour ca.
    Une simple jointure fait l'affaire.


    Explication :

    - Je fais ma jointure entre les deux tables.
    - Je les regroupe par idClient
    - Je place mes requêtes en ordre décroissante (de plus grand nombre de commande au plus petit)
    - Je réduit l'affichage de ma requête sur ma première occurrence (donc le plus grand.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT clt.clinum, count(1) NB
    FROM client clt
    JOIN commande com
    ON clt.clinum = com.clinum
    GROUP BY clt.clinum
    ORDER BY COUNT(1) DESC
    LIMIT 1

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Par défaut
    Merci xoum89 pour ta solution.

    Cependant aurais tu une idée comment faire pour faire fonctionner la requete mise dans mon premier post, cad comprenant un select imbriqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT clinum, clinom, max(nb)  FROM 
    (SELECT clinum, count(*) FROM commande GROUP BY clinum) AS nb
    FROM client
    Merci.

Discussions similaires

  1. Remplacement d'une table par une vue
    Par Passepoil dans le forum Développement
    Réponses: 5
    Dernier message: 04/04/2011, 15h19
  2. [SQL] remplacer le VraiFaux d'access dans une Vue
    Par alain_27 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/09/2005, 15h51
  3. [TADOTable] reconnaitre le trigger INSTEAD OF d'une vue...
    Par littledoudou dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/12/2003, 12h39
  4. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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