2017-10-05 109 views
0

我試圖在滿足條件時計算某個表的某些行。以下是我正在嘗試做的一個例子。帶有CASE內條件的SELECT計數

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次以上。

回答

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 
+0

似乎是一個好辦法做到這一點,但它運行後我得到了,_Every派生表必須有自己的alias._ –

+1

我希望你搜索的第一個值錯誤信息,並在編輯我的答案之前找到解決方案以顯示它。 – Barmar

+0

哈哈我做了,我不知道,但它使認爲你必須是一個非常好的人說,我知道它可能不相關,只是讓我想想它:p –