1

nullの場合、カウントが0になるようにするにはどうすればよいですか。次のステートメントで実行すると:

SELECT S.shortText, COUNT(O.selectionID) AS C FROM Opinions O
LEFT JOIN Selections S ON S.id=O.selectionID
WHERE S.qID=3 AND MONTH(O.entryDate)=5 
GROUP BY S.shortText

 shortText         C    
 ----------------  ---- 
 Leisure           0       <------ this line missing 
 Business          3
 University visit  1

私の選択表

 id     shortText        
 -----  ---------------- 
 1      Leisure          
 2      Business         
 3      University visit

私の意見表

 id     entryDate              selectionID    
 -----  ---------------------  -------------- 
 186    5/21/2012 11:34:37 AM  2              
 205    5/22/2012 9:13:25 AM   2              
 216    5/22/2012 9:43:14 AM   2              
 237    5/24/2012 8:24:00 PM   3   
4

3 に答える 3

2

意見テーブルに一致するレコードがない場合でも、レジャー行を 0 として表示したい場合。次のようにサブクエリを使用します。

select t1.shorttext,if(t2.c is null,0,t2.c)as c from selections t1 left join (

SELECT s.id,S.shortText, COUNT(O.selectionID) AS C FROM selections S
LEFT JOIN opinions O ON S.id=O.selectionID
WHERE  MONTH(O.entryDate)=5 
GROUP BY S.shortText
  ) t2 on t1.id=t2.id

http://sqlfiddle.com/#!2/8ca3e/11

于 2012-10-18T08:45:29.250 に答える
1

それを表示したい場合は、表SelectionsOpinions表を入れ替えてください。

SELECT S.shortText, COUNT(O.selectionID) AS C 
FROM   Selections S
       LEFT JOIN Opinions O 
         ON S.id=O.selectionID
-- WHERE  S.ID=3 AND                     -- add extra conditions here
--       MONTH(O.entryDate)=5 
GROUP BY S.shortText

SQLFiddle デモ

または使用RIGHT JOIN

SELECT S.shortText, COUNT(O.selectionID) AS C 
FROM   Opinions O 
       RIGHT JOIN Selections S
         ON S.id=O.selectionID
-- WHERE  S.ID=3 AND 
--       MONTH(O.entryDate)=5 
GROUP BY S.shortText

SQLFiddle デモ

于 2012-10-18T08:30:04.450 に答える
0

テーブルを交換してみましたか?SELECTTIONSから選択して、あなたが持っている方法ではなく、OPINIONSに参加してください。

于 2012-10-18T08:38:44.890 に答える