2017-10-05 12 views
0

J'essaie de compter certaines lignes d'une table lorsqu'une condition est remplie. Voici un exemple de ce que j'essaie de faire.SÉLECTION nombre avec condition à l'intérieur CASE

SELECT (CASE 
     WHEN COUNT(*)<9 WHERE (tb1.col IS NULL OR tb1.col=1) THEN 1 
     WHEN COUNT(*)<9 WHERE tb1.col=2 THEN 2 
     WHEN COUNT(*)<9 WHERE tb1.col=3 THEN 3 
     WHEN COUNT(*)<9 WHERE tb1.col=4 THEN 4 
     WHEN COUNT(*)<9 WHERE tb1.col=5 THEN 5 
     WHEN COUNT(*)<9 WHERE tb1.col=6 THEN 6 
    END) 
WHERE tb1.id=X 

Je sais que ce ne fonctionne pas exactement comme ça, mais je me demandais, puisque je dois faire 12 plus quand .. alors, s'il y a une autre façon de le faire. Fondamentalement, j'essaie de compter les lignes qui répondent à une condition et de vérifier s'il y en a moins de 9. Répétez cela 17 fois de plus.

Répondre

1

Groupez vos données par tb1.col et obtenez le nombre de chaque groupe. Ensuite, trouver la première valeur qui a moins de 9.

SELECT MIN(col) AS val 
FROM (
    SELECT IFNULL(tb1.col, 1) AS col, COUNT(*) AS count 
    FROM yourTable AS tb1 
    WHERE tb1.id = X 
    GROUP BY col 
) x 
WHERE count < 9 
+0

On dirait une bonne façon de le faire, mais après je suis arrivé en cours d'exécution, table dérivée every doit avoir son propre alias._ –

+1

J'espère que vous avez cherché pour cela message d'erreur et trouvé la solution avant d'éditer ma réponse pour la montrer. – Barmar

+0

haha ​​je l'ai fait, je ne sais pas, mais il a fait penser que vous devez être une personne vraiment bonne en disant que, je sais que cela pourrait ne pas corréler du tout, juste fait réfléchir: p –