2016-12-16 68 views
0

我現在有現在才發生的一個查詢,查找所有行(與status=0)的兩側值條件:多COUNT()就一系列

SELECT id, COUNT(1) FROM tbl WHERE status = 0 AND date < UNIX_TIMESTAMP() GROUP BY id; 

不過,現在我倒是喜歡能夠檢索另一側的值 - 即,我想在現在之前獲得之後的所有可用日期,作爲兩個不同的值。

除了簡單地運行兩個單獨的查詢之外,有什麼方法可以優化嗎?

回答

1
SELECT id 
    , SUM(date < UNIX_TIMESTAMP()) AS BeforeNow 
    , SUM(date > UNIX_TIMESTAMP()) AS AfterNow 
    FROM tbl 
WHERE status = 0 
GROUP BY id; 

date < UNIX_TIMESTAMP()是一個布爾表達式,這相當於1或0的表達式的SUM等於倍它是真實的量,或者它的計數。

+0

請問您可以在答案上添加一些上下文。這將有助於提問者和讀者。 – RBT

+2

@RBT老實說,我不確定哪個部分需要更多的上下文,但我已經添加了一些關於使用'SUM'的解釋,因爲它有點不常見。 – shmosel

+1

謝謝你,感謝你的及時迴應。我剛剛在審查隊列中看到它,並將其視爲僅用於代碼的答案。因此我提供了我的反饋。 – RBT

1

你可以做一個條件計數。

SELECT id, 
    COUNT(CASE WHEN date < UNIX_TIMESTAMP() THEN 1 ELSE null END) , 
    COUNT(CASE WHEN date > UNIX_TIMESTAMP() THEN 1 ELSE null END) 

FROM tbl GROUP BY id