2016-06-24 8 views
0

私は、各ユーザが値 "1"または "2"または "3"を含むカラム "status"を持つテーブル "users"を持っています。mysqlは単一のクエリで複数の型をカウントします

今単一mysqliのクエリで、私はちょうど、ステータス= 1とどのように多くのユーザーをカウントしたい、どのように多くのユーザーのステータス= 2、そしてどのように多くのユーザーのステータスを持つ= 3

NBとのクエリでなければなりませんそれぞれのステータスの数を除いて選択または出力する必要はありません。

ほとんど同じトピックをカバーする他の質問がありましたが、まったく同じではありません。

ありがとうございました。

+3

' SELECTステータス、ユーザーからのカウント(*)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; 

カウントは唯一の非nullのエントリをカウントし、ケース-ときだけでなく、他のデータベースで動作します。

+0

ありがとうございますが、私は$行= $ 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

関連する問題