2013-03-09 106 views
1

我遇到評分系統問題。帶有LEFT JOIN的SQLite AVG()不返回所有行

當在LEFT JOIN中沒有匹配時,它在使用AVG()時根本沒有返回行。

如果沒有加入結果,則返回NULL。

SELECT op_id, 
     ..., 
     rating_stars 

但是這會刪除該行。

SELECT op_id, 
     ..., 
     AVG(rating_stars) 

這是我最後一次嘗試:

SELECT op_id, 
     op_img, 
     op_title, 
     op_worktime, 
     op_cookingtime, 
     CASE rating_stars WHEN null THEN 0 ELSE AVG(rating_stars) END 
FROM 
opskrifter 
LEFT JOIN 
    rating 
ON 
    rating.fk_op_id = opskrifter.op_id 
WHERE 
    fk_type_id=1 
ORDER BY 
    op_id DESC 

我需要所有的結果,如果它未被評爲但它應該只是返回0這樣的:

ID  | RATING 
--- 1 --- | --- 0 --- 
--- 2 --- | --- 4 --- 
--- 3 --- | --- 0 --- 

但上面SQL返回:

ID  | RATING 
--- 2 --- | --- 4 --- 

我很確定我在MySQL中完成了這個任務,沒有任何問題。

回答

2

你需要有GROUP BY條款,

SELECT... 
FROM... 
WHERE... 
GROUP BY op_id, 
     op_img, 
     op_title, 
     op_worktime, 
     op_cookingtime 
+0

*您可以用您的問題一起發佈樣本記錄* – 2013-03-09 11:28:59

+0

我創造了這個SQLfiddle:http://sqlfiddle.com/#!5/0bc78/1 – Lasse 2013-03-09 11:43:28

+0

這個查詢的輸出是否正確?看到這裏http://www.sqlfiddle.com/#!7/0fda4/1 – 2013-03-09 11:45:27