2009-08-21 60 views
11

好的,所以我想要做的是根據不同的標準在同一個表上執行不同的COUNT(),而不嵌套查詢(效率)或子查詢(所以它可以製作成視圖)。這可能嗎?mySQL:基於不同標準的多個COUNT()

示例:一個表有一個日期列 - 查詢應該能夠產生一個在恆定日期之後&之前的行數。

回答

28

您使用的是MySQL,因此您可以利用它的功能,布爾表達式的計算結果爲0代表假,1代表真。 1的SUM()等於表達式爲真的COUNT()

SELECT SUM(date_column < '2009-08-21') AS prior_to_date, 
     SUM(date_column > '2009-08-21') AS after_date 
FROM MyTable; 

PS:不要試圖此其他品牌數據庫的該秉持SQL標準行爲,即布爾表達式產生一個布爾,而不是一個0或1的整數。

+0

不錯 - 這很好。在其他使用SQL語法的數據庫中,假設在SUM內部有一個返回1或0的IF,因爲條件也應該起作用。 – dborba 2009-08-21 19:41:08

+1

是的。但是如果你想成爲最便攜的,使用'CASE'表達式。標準SQL中沒有'IF()'。 – 2009-08-21 19:43:57

+0

我嘗試了多個和單獨。我發現的問題,如果我把必要的where子句單獨的select語句,然後mysql使用索引,但是當它們合併時,它不使用索引。檢查使用解釋。 – 2014-08-06 13:04:51