[SQL ] 如何計算關聯表資料列的數量?

看板Database作者 (低溫烘焙)時間17年前 (2009/03/09 08:29), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串1/1
假設一個專案可有多個任務,目前想在檢視專案清單時 同時列出專案底下共有多少任務數量,以及完成的任務數量 雖然可以用程式分次下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

03/09 12:00, , 1F
不能在程式上處理嗎?SQL應該無法幫你WHERE id = $1
03/09 12:00, 1F

03/10 19:16, , 2F
count(case complete = 'true' then 1 else 0 end)
03/10 19:16, 2F

03/10 19:20, , 3F
搞錯了,是sum才對,而且少一個when囧
03/10 19:20, 3F

03/10 22:30, , 4F
原來可以這樣寫:),感謝,後來我也試出來另一種了
03/10 22:30, 4F

03/10 22:36, , 5F
SUM(IF(m.complete,1,0)) AS completed
03/10 22:36, 5F
文章代碼(AID): #19j6C3Pp (Database)