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 :

Compter le nombre de colonnes not null


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Points : 29
    Points
    29
    Par défaut Compter le nombre de colonnes not null
    Bonjour,

    j'ai beau chercher sur google net sur le forum, je n'arrive pas à trouver la bonne requête à faire.


    Voici le descriptif de la table sur lequel je veux travailler:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    id	1	0	NO	int	10	0	
    titre	2	''	NO	varchar			
    date_pub	3	current_timestamp()	NO	timestamp			
    texte	4		NO	text			
    pj_1	5	NULL	YES	varchar			
    pj_2	6	NULL	YES	varchar			
    pj_3	7	NULL	YES	varchar			
    is_enabled	8		NO	tinyint	3	0	
    id_user	9	0	NO	int	10	0	
    id_instance	10	0	YES	int	10	0

    je cherche a faire une requête qui compte le nombre colonne pj_1,pj_2e t pj_3 qui soient not null pour un id précis.



    j'ai essayé de me baseé sur les réponse :
    https://www.developpez.net/forums/d1...-count-select/ et https://www.developpez.net/forums/d2...s-same-values/

    mais je n'obtient des erreurs ou alors un resultat non pertinant

    par exemple la requete faite omme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select sum 
    ( case when PJ_1 is not null then 1 else 0 end ) as nombre1
    from news
    where id=56)
    union all
    (case when PJ_2 is not null then 1 else 0 end ) as nombre2
    from news
    where id=56
    )
    ;
    me renvoie l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')
    union all
    (case when PJ_2 is not null then 1 else 0 end ) as nombre2
    from news' at line 4
    j'ai réussi a faire la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select count(case when pj_1 is not null then 1 end),
    count(case when pj_2 is not null then 1 end),
    count(case when pj_3 is not null then 1 end)
    from news
    where id =56
    ;
    cela me renvoi le résultat suivant:

    alors que je voudrais avoir 3 comme résultat.

    j’espère que mon descriptif de ma demande est assez claire.


    avez vous une idée comment je peux corriger mes erreurs?

    merci par avance pour votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 543
    Points
    52 543
    Billets dans le blog
    5
    Par défaut
    Votre base de données viole la première forme normale par apocope.... Donc, vous aurez des difficultés à écrire vos requêtes ainsi que des performances de merde....


    Vous auriez du avoir une table annexe de PJ comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    pj_id PRIMARY KEY
    ??? NOT NULL FOREIGN KEY 
    pj_num INT NOT NULL
    pj_data VARCHAR NOT NULL
    Dès lors vos requêtes deviendrons triviales....

    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...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci pour la réponse.

    je ne suis pas l'auteur de la base de donnée et je ne fais que reprendre un site intranet qui à 10 ans environ et fait par un pur dev frontend pour modification et mise à jour.

    Si je comprend bien, dans la forme actuelle je ne pourrais avoir aucune réponse possible.

    il faudrait donc que je modifie la base afin que je passe en sur la première forme normale.

    si c'est le cas cela va me demander un sacré taf de refonte de mon site intranet ...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Est-ce que la requête suivante fonctionne ?
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select (case when col1 is null then 1 else 0 end) + (case when col2 is null then 1 else 0 end) + (case when col3 is null then 1 else 0 end)
    from latable
    where col4 = 1234

    Tatayo.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Novembre 2003
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2003
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Merci c'est justement ce que je cherchais comme astuce.

    cela m'aide énormément.

Discussions similaires

  1. Réponses: 5
    Dernier message: 16/02/2007, 16h03
  2. [MEGA DEBUTANT] Compter le nombre de colonne non vide
    Par drikse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/09/2006, 10h59
  3. Compter le nombre de colonnes d'une table
    Par Lord_Jago dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/07/2006, 11h44
  4. [SQL]Compter le nombre de colonne
    Par dumser1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2006, 09h53
  5. Prb Insert avec Colonne NOT NULL
    Par Sunny dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 10/12/2005, 12h59

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