SELECT sg.date, sg.groupName, sg.highlights, user.display_name as displayName,
COUNT(*) as cmtcnt
FROM `saved_groups` as sg
LEFT JOIN `user` on user.email = sg.userName
LEFT JOIN `user_comments` as uc on sg.groupName = uc.groupName
GROUP BY sg.groupName
我有兩個表,saved_groups并user_comments和查詢的第二行應該(做,它的作業原理)以及與每個組相關聯的評論的數量回傳一個額外的列。
但是,當一個組的相關評論為零時,計數在它應該回傳零時回傳 1。
如何修復此查詢?
我試過:COUNT(*)-1 as cmtcnt-- 對于沒有評論的組,它回傳零,但對于具有關聯評論的組,它也會回傳不正確的數字 (-1)。
我也試過:NULL(Count(*), 0)- 但錯誤與#1582 - Incorrect parameter count in the call to native function 'ISNULL'
我也嘗試過:COALESCE(COUNT(*), 0) as cmtcnt--這沒有任何區別(對于所有評論為零的組回傳 1,為其他組回傳正確的數字)
建議?
uj5u.com熱心網友回復:
COUNT()聚合函式從不回傳null并且COUNT(*)總是回傳大于的值,0因為它計算結果集的所有行。
您想要的是計算與子句user_comments中的條件匹配的行,ON您可以通過在括號內指定列來完成此操作groupName:
COUNT(uc.groupName)
只有這樣,非空行會算,你可以得到0,如果特定sg.groupName的代碼中沒有匹配的行user_comments。
uj5u.com熱心網友回復:
當您說 count(*) 時,您正在計算所有表格中的所有內容。因為saved_groups有一行,你會得到 1 回傳,這是正確的。
你想要的是只計算評論。因此,COUNT(*) as cmtcnt您應該使用COUNT(uc.*) as cmtcnt.
這告訴查詢只計算 uc 表中的行數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363124.html
上一篇:將一列從其他列的值添加到sql表
下一篇:將客戶資料匯總為一行
