作者liaosankai (低溫烘焙)
看板Database
標題[SQL ] 如何計算關聯表資料列的數量?
時間Mon Mar 9 08:29:49 2009
假設一個專案可有多個任務,目前想在檢視專案清單時
同時列出專案底下共有多少任務數量,以及完成的任務數量
雖然可以用程式分次下SQL語法後,再結合統計,但覺得這種事應該
只要下一次SQL就能都查詢出來才對,希望各位先輩給點意見,感謝,=v=
為了方便思考,我把table結構簡化如下:
project(專案)
----------------------
id (int) 資料識別碼
name (varchar) 專案名稱
mission(任務)
----------------------
FK_project (int) 對應的專案
complete (boolean) 是否完成
專案資料(project)
==========================
id name
--------------------------
1 專案1
2 專案2
==========================
任務資料(mission)
==========================
FK_project complete
--------------------------
1 true
1 false
2 true
2 true
2 false
==========================
心中預期結果表(result)
===================================
name completed total
-----------------------------------
專案1 1 2
專案2 2 3
===================================
目前我測試下列的語法:
SELECT p.name,count(*) AS total
FORM project AS p,mission AS m
WHERE p.id = m.FK_project
GROUP BY m.FK_project
可得到結果如下:
======================
name total
----------------------
專案1 2
專案2 3
======================
請問如何計算取得 completed(已完成) 那個欄位數值?
這是我卡住的地方,煩請大家指點...Orz
還有這不是作業=.=|||,只是單純我遇到的問題而已
--
歡迎來我的網誌看看
@
http://doublekai.org/blog
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.37.127
推 marcoyan:不能在程式上處理嗎?SQL應該無法幫你WHERE id = $1 03/09 12:00
推 Antzzz:count(case complete = 'true' then 1 else 0 end) 03/10 19:16
推 Antzzz:搞錯了,是sum才對,而且少一個when囧 03/10 19:20
→ liaosankai:原來可以這樣寫:),感謝,後來我也試出來另一種了 03/10 22:30
→ liaosankai:SUM(IF(m.complete,1,0)) AS completed 03/10 22:36