2016-10-12 69 views
0

我使用DISTINCT,LEFT JOIN,COUNT和GROUP BY在單個語句,就像這樣:多COUNT和GROUP BY在一條語句

SELECT distinct r.sid as sid, s.name as sname, s.image as simage, 
COUNT(r.sid) as scount FROM batch_request r LEFT JOIN student_info s ON s.id = r.sid 
WHERE r.tid='22' group by r.sid 

編碼的JSON是這樣的:

{ "students": 
[ 
{ 
"sid":"1", 
"sname":"Sonali Kohli", 
"simage":"22", 
"scount":"3", 
"sconfirmed":null, 
"sdeclined":null 
}, 
{ 
"sid":"2", 
"sname":"Sona Ali Khan", 
"simage":"22", 
"scount":"3", 
"sconfirmed":null, 
"sdeclined":null 
} 
],"success":1 
} 

表:

enter image description here

正如你可以在上面的圖片查看,我公頃在一個表中共有6條記錄(3對於sid = 1和3對於sid = 2)

sid 1記錄的狀態(2確認[其中值爲1]和1拒絕[其中值爲2]),in同樣的方式sid 2記錄的狀態(1確認[其中值爲1]和2拒絕[其中值爲2])

同樣的事情我想通過我上面發佈的將QUERY編碼成JSON正如你所看到的,還是我越來越空了兩個JSON對象(即:確認並拒絕)

問題1:應該是什麼的的值and sdeclined for both objects of JSON

ANSWER 1:sid = 1情況下(sconfirmed = 2和sdeclined = 1)和用於sid = 2sconfirmed = 1和sdeclined = 2)

問題2:數據庫表中的sconfirmedsdeclined是什麼?

答2:sconfirmed只是記錄計數其中狀態1特定SIDsdeclined是記錄計數其中狀態2特定SID

+0

對於JSON的兩個對象,sconfirmed和sdeclined的值應該是多少? –

+0

在sid = 1(sconfirmed = 2和sdeclined = 1)且sid = 2(sconfirmed = 1和sdeclined = 2)的情況下@AlokPatel – Sonali

+0

請參閱http://meta.stackoverflow.com/questions/333952/why-我應該提供一個mcve爲什麼似乎對我來說是一個非常簡單的sql查詢 – Strawberry

回答

1

嘗試類似這樣:

SELECT distinct r.sid as sid, s.name as sname, s.image as simage, COUNT(r.sid) as scount, 
SUM(CASE r.status WHEN 1 THEN 1 ELSE 0 END) as sconfirmed, 
SUM(CASE r.status WHEN 2 THEN 1 ELSE 0 END) as sdeclined, 
SUM(CASE r.status WHEN 0 THEN 1 ELSE 0 END) as spending 
FROM batch_request r LEFT JOIN student_info s ON s.id = r.sid 
WHERE r.tid='22' 
GROUP BY r.sid 
+0

嘿謝謝張貼,對不起,我忘了告訴你,除了確認(即1)和拒絕(即2) – Sonali

+0

之外,我還有一個稱爲0的狀態爲待處理,而且你還希望它計數嗎?你有一個變量嗎?如果你不需要關於待定狀態的信息,那麼上面的代碼應該工作正確。 –

+0

您可以使用相同的方法。我會更新我的答案以添加它。 –