2011-05-30 31 views
6

選擇一個以上的次數是否有可能在MySQL中做這樣的事情:在MySQL

SELECT COUNT(*) as totalcount, 
     COUNT(*) WHERE foo IS NULL as conditional_count 
    FROM baz 

即獲得兩項罪名,一切之一,東西一條匹配的WHERE子句,在一個單一的選擇?

+0

它應該是這樣的'SELECT COUNT(*)作爲TOTALCOUNT, (SELECT COUNT(*),其中,foo是NULL)作爲conditional_count FROM baz'這是一個單一的查詢,但裏面 – 2011-05-30 06:22:41

+0

@ skowron行子查詢請作爲回答發佈 – 2011-05-30 06:28:58

回答

11

如果你的數據庫支持CASE WHEN語句,這將工作,否則你仍然會得到基本的想法。

SELECT COUNT(*), 
     SUM(CASE WHEN FOO IS NULL THEN 1 ELSE 0 END) AS COUNT_CONDITIONAL 
    FROM baz 
+0

+1:擊敗我25秒 – 2011-05-30 06:22:00

+0

將此標記爲最佳,因爲我嘗試了它,併發揮作用。看起來,skowron-line的子選擇方法看起來不錯,但不適用於我的MySQL版本。 – AmbroseChapel 2011-05-31 01:31:52

0

嘗試用UNION(未測試)

SELECT COUNT(*) as totalcount FROM baz 
UNION 
SELECT COUNT(*) WHERE foo IS NULL as conditional_count FROM baz 
+0

這將返回2記錄與1個字段,而不是1個記錄與2個字段 – 2011-05-30 06:24:49

+0

這給你兩行有一列,稱爲'totalcount'。 – 2011-05-30 06:26:25

-1

我不認爲這是可能的。我想你會需要兩個查詢。

Select count(*) from baz 

Select count(foo) from baz where foo is null 
2

它應該是這樣的SELECT COUNT(*) as totalcount, (SELECT COUNT(*) WHERE foo IS NULL) as conditional_count FROM baz這是一個單一的查詢,但裏面

+0

看起來不錯,但不適用於我正在使用的MySQL服務器5.0.37。 – AmbroseChapel 2011-05-31 01:32:42

+0

嗯,可以即時使用5.5.8,這樣的querys工作得很好 – 2011-05-31 07:27:21

1

SELECT COUNT()作爲TOTALCOUNT, 子查詢(SELECT COUNT()FROM巴茲其中,foo是NULL) 作爲conditional_count FROM baz;

我不能在計數括號之間放置星號(*)! 我放了它,但我無法顯示它。