2016-06-24 64 views
0

我有一個表「用戶」,其中每個用戶具有包含值「1」或「2」或「3」的列「狀態」;mysql通過單個查詢計算多個類型

現在有了一個mysqli的查詢,我只是想有多少用戶使用狀態= 1,有多少用戶使用狀態= 2,以及有多少用戶使用狀態= 3

注數:查詢必須是隻計數,除了每個狀態的編號外,不必選擇或輸出數據。

我在這裏發現其他問題涵蓋幾乎相同的主題,但他們不完全相同。

謝謝。

+3

' SELECT狀態,計數(*)FROM用戶GROUP BY狀態' –

+1

在評論部分中經常可以找到最佳答案? :-) –

回答

3

如何:

SELECT 
    count(case when status = 1 then 1 else null end) AS STATUS_1, 
    count(case when status = 2 then 1 else null end) AS STATUS_2, 
    count(case when status = 3 then 1 else null end) AS STATUS_3 
FROM users; 

次數纔會計數非空條目和案例時,將在其他數據庫正常工作。

+0

謝謝你,但我應該使用$ row = $ result-> fetch_assoc();或者它不起作用? – medk

1

使用這樣的事情:

SELECT 
SUM(IF(value=1,1,0)) as one, 
SUM(IF(value=2,1,0)) as two, 
SUM(IF(value=3,1,0)) as trhee 
FROM users 

IF只給出了一個「1」回來時,你的價值觀是你希望它是什麼。

1

這可以通過選擇性計數來實現:只使用內部count,只有通過了所需的行的非空值的CASE表達式:

SELECT count(CASE WHEN status = 1 THEN 1 END) status_1 
    , count(CASE WHEN status = 2 THEN 1 END) status_2 
    , count(CASE WHEN status = 3 THEN 1 END) status_3 
    FROM users 

這是一樣的更好,但不是nativley使用FILTER支持的語法:

SELECT count(*) FILER(WHERE status = 1) status_1 
    , count(*) FILER(WHERE status = 2) status_2 
    , count(*) FILER(WHERE status = 3) status_3 
    FROM users 

瞭解更多關於這在我的網站現代化SQL:http://modern-sql.com/feature/filter