2010-08-31 3 views
1

J'essaye de mettre en place une requête MYSQL qui comptera le nombre de valeurs Non-Null (ou mieux encore, non nulles) dans des champs sélectionnés en un seul ligne, puis trier du plus bas au plus élevé (en fonction du nombre). Par exemple, j'ai une table avec 5 champs ... ID, Nom, Score_1, Score_2, Score_3. Je veux compter combien de fois la valeur "0" existe dans Score_1, Score_2 et Score_3 pour chaque enregistrement, puis trier de la plupart des valeurs non nulles au moins.Requête MySQL pour compter les valeurs non nulles dans une seule ligne

 
ID Name Score_1 Score_2 Score_3 
1 Dan 8   7   0 
2 Joe 0   0   3 
3 Chris 0   0   0 
4 Mike 4   5   5 

Je suppose que la requête doit ressembler à quelque chose comme ça ...

Select, Nom, Score_1, Score_2, Score_3 où (???) ORDER BY (???)

sortie devrait ressembler à ceci (ID 4 est affichée en premier car il a le moins d'entrées non nulles) ...

 
ID Name Score_1 Score_2 Score_3 
4 Mike 4   5   5 
1 Dan 8   7   0 
2 Joe 0   0   3 
3 Chris 0   0   0 

Je suis un peu nouveau pour de requête MySQL, de sorte que toute aide serait grandement appréciée . Je pensais que la fonction COUNT aiderait, mais cette fonction semble compter les colonnes de toutes les lignes. Peut-être existe-t-il un moyen d'utiliser la fonction COUNT et de la limiter à une ligne singel afin qu'elle puisse être triée par ce nombre de lignes?

Répondre

2

Cela devrait faire ce que vous voulez:

SELECT ID, Name, Score_1, Score_2, Score_3 
FROM Table1 
ORDER BY (Score_1 = 0) + (Score_2 = 0) + (Score_3 = 0) 

Résultat:

 
ID Name Score_1 Score_2 Score_3 
4 Mike 4  5  5  
1 Dan 8  7  0  
2 Joe 0  0  3  
3 Chris 0  0  0  
+0

Awesome! Cela fonctionne ... exactement ce que je cherchais. Pensé à coup sûr, il faudrait que ce soit plus compliqué. – Dan

+0

Merci !!!!!!!!!! – Dan

+0

De rien. –

0

essayez ceci:

Select id, Count1, Count2, Count3, Count4 
From 
    (Select 
     Sum(Case When IsNull(Score_1,0) = 0 Then 1 Else 0 End) Count1, 
     Sum(Case When IsNull(Score_2,0) = 0 Then 1 Else 0 End) Count2, 
     Sum(Case When IsNull(Score_3,0) = 0 Then 1 Else 0 End) Count3, 
     Sum(Case When IsNull(Score_4,0) = 0 Then 1 Else 0 End) Count4 
    From Table 
    Group By Id) Z -- This column (Id) better not be the PK for this table!!! 
Order By Count1 + Count2 + Count3 + Count4 
+0

Je n'ai pas pu obtenir ce travail ... il On dirait qu'il peut manquer un parent fermé après 'Sum' mais après avoir ajouté une parenthèse fermée, je n'arrive toujours pas à le faire fonctionner. – Dan

+0

oui typo. Parenthèses manquantes .. Edité pour corriger ... –

Questions connexes