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

  1. #1
    nux
    nux est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 15
    Points : 9
    Points
    9

    Par défaut Sql error : Derived tables not supported

    Bonjour,

    J'utilise actuellement postgreSQL 11 avec DBeaver et des fichiers dbf. J'avais essayé LibreOffice sans trop de succès.
    https://www.developpez.net/forums/d1...fice-base-sql/

    Actuellement, j'essaye de faire des statistiques sur une table uniquement.

    La table se nomme Table1
    Les champs sont ARRIVEE (de 0 à 5 uniquement) et PLACE1. Je désire connaitre le % de PLACE1 par ARRIVEE sur le total filtré par PLACE1 également et non le total général.

    La requête de base qui fonctionne pour connaître le total de PLACE1 par ARRIVEE est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ARRIVEE, COUNT( * ) AS Total FROM Table1 WHERE PLACE1 = 1
    GROUP BY ARRIVEE 
    ORDER BY ARRIVEE
    Ensuite pour en calculer le % par ARRIVEE, voici la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT ARRIVEE, 
    ROUND( 100.0 * Total / ( SELECT COUNT( * ) FROM Table1 WHERE PLACE1 = 1 )) AS Resultat 
    FROM ( SELECT ARRIVEE, COUNT( * ) AS Total FROM Table1 WHERE PLACE1 = 1 ) 
    GROUP BY ARRIVEE 
    ORDER BY ARRIVEE
    La réponse est SQL Error: Syntax error: derived tables not supported (table dérivée). Il n'y a qu'une table.

    Pourtant, cette requête fonctionne avec base de Openoffice.

    Avez vous une idée pour cette requête ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Inscrit en
    mai 2002
    Messages
    18 316
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert SGBDR & SQL, spécialiste Microsoft SQL Server
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 18 316
    Points : 42 808
    Points
    42 808

    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT ARRIVEE, 
          100.0 * COUNT(*) OVER(PARTITION BY ARRIVEE) /
    	  COUNT(*) OVER() AS POURCENTAGE_PAR_ARRIVEE
    FROM Table1
    Tout simplement !
    Et pour apprendre le langage SQL :
    Nom : SQL.jpg
Affichages : 19
Taille : 47,4 Ko

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  3. #3
    nux
    nux est déconnecté
    Futur Membre du Club
    Profil pro
    Inscrit en
    septembre 2003
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2003
    Messages : 15
    Points : 9
    Points
    9

    Par défaut

    Merci pour la réponse et pour la référence du livre.

    Ca fonctionne parfaitement. Il manque juste 3 colonnes : l'écart minimum, maximal et moyen par arrivée que je ferais plus tard.

    J'avais essayé ceci qui me donne le total par arrivée
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     create or replace view "Calcul"(numeric) as (SELECT "ARRIVEE", COUNT( * ) AS Total FROM "Feuille1" 
    WHERE "PLACE1" = 1
    GROUP BY "ARRIVEE" ORDER BY "ARRIVEE");
    select * from "Calcul"

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/01/2015, 17h16
  2. Réponses: 3
    Dernier message: 07/12/2011, 14h48
  3. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 17h26
  4. [IBConsole]SQL Error
    Par Seb7 dans le forum SQL
    Réponses: 4
    Dernier message: 10/07/2003, 12h38
  5. [SQL] Remplacer une table
    Par rstephane dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/05/2003, 18h10

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