带有LEFT JOIN的SQLite AVG()不返回所有行

时间:2013-03-09 11:25:34

标签: sql sqlite select

我的评级系统存在问题。

LEFT JOIN中没有匹配项时,当使用AVG()时,dosnt会返回该行。

如果连接中没有结果,则返回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中完成了这项工作,没有任何问题。

1 个答案:

答案 0 :(得分:2)

您需要GROUP BY子句,

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