2016-08-20 10 views
0

SQLクエリで計算を行おうとしていません。このようになります 私が持っているテーブルの出席:SQLクエリで計算する

roll | class_id | status 
abc |  1 | 0 
qwe |  1 | 0 
zxc |  2 | 1 
xcv |  1 | 1 
mnb |  2 | 1 
poi |  1 | 1 
lkj |  2 | 0 

は、私がここに式を適用する必要があります。ATTの75%以上を持っているすべてのロールを表示し、その後

att= (count where roll="abc" status = "1"/count where roll="abc" status = "1" + count where roll="abc" status = "0") * 100 

をそして

roll | att 
abc | 80 
xyz | 100 

私はPHPで値を取得した後、この計算を行っていた。しかし、今私はこれをクエリで行う必要があります。私は

select * from attendance where status="0" and roll="abc" 

によって個別にそれを行うと、その後status="1"

ために再びそれを行うと、誰かが私に説明できますか? クエリでどのようにアプローチできますか?

答えて

2

SUM()を使用すると、条件が一致したときに条件が1になるため、条件に一致する合計行を取得できます。

SELECT roll, ROUND(SUM(status = 1)/COUNT(*) * 100) AS att 
FROM attendance 
GROUP BY roll 
HAVING att > 75 
+0

あなたは私の質問を理解していないと思います。 –

+0

私は、ステータス= 0とステータス= 1の行を数えなければなりません。 –

+0

0の行では、 'status = 0'は' 1'を返します。それらを合計すると、それらの行がカウントされます。 – Barmar