Mysql 选择机箱内有条件的计数

Mysql 选择机箱内有条件的计数,mysql,count,case,Mysql,Count,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 tb

我试图在满足条件时计算表中的某些行。下面是我试图做的一个例子

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
我知道它不完全是那样工作的,但我想知道,因为我必须在。。然后,如果有其他方法可以做到这一点。基本上,我试图计算满足条件的行数,并检查是否少于9行。再重复17次。

按tb1.col将数据分组,并获得每组的计数。然后找到第一个小于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

这似乎是一个很好的方法,但在运行它之后,我得到的每个派生表都必须有自己的别名。我希望在我编辑我的答案之前,您搜索了该错误消息并找到了解决方案。哈哈,我做了,我不知道,但这让我觉得您一定是一个非常好的人,说,我知道它可能根本不相关,只是让我想了想:PZ因为我有很多rep并不意味着我不会犯错误。作为旁注:我注意到它对null和col=1返回不同的结果。我的意思是,它们应该算作一个整体,而不是分开。因此,3x col=null col和8x col=1应返回为2,而不是1,因为3+8>9