【问题标题】:SELECT count with condition inside CASESELECT 计数与 CASE 内的条件
【发布时间】:2017-10-05 17:19:52
【问题描述】:

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

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

我知道它不完全那样工作,但我想知道,因为我必须再制作 12 个 WHEN.. 那么,如果有其他方法可以做到这一点。基本上是在尝试计算满足条件的行并检查是否少于 9。再重复 17 次。

【问题讨论】:

    标签: mysql count case


    【解决方案1】:

    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
    

    【讨论】:

    • 似乎是个不错的方法,但运行后我得到了,每个派生表都必须有自己的别名。
    • 我希望您在我编辑我的答案以显示它之前搜索了该错误消息并找到了解决方案。
    • 哈哈我做到了,我不知道,但它让人觉得你一定是一个非常好的人这么说,我知道这可能根本不相关,只是让我考虑了一下:p
    • 我有很多代表并不意味着我不会犯错误。
    • 附带说明:我注意到它为 null 和 col=1 返回不同的结果。我的意思是,它们应该算作一个而不是分开的。所以 3x col=null col 和 8x col=1,应该返回 2,而不是 1 导致 3+8>9
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2019-05-12
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    相关资源
    最近更新 更多