从表1中选择表2和表3中的平均AND不同值的所有内容

时间:2017-11-14 08:29:57

标签: mysql

我甚至不确定如何命名这篇文章,因为我不确切知道如何提问。

我有三张桌子。一个是用户,一个是食物,另一个是食物的用户评价,如此(简化示例):

Foods
id  name    type
---------------------
1   Apple   fruit
2   Banana  fruit
3   Steak   meat

Users
id  username
-----------------
1   Mark
2   Harrison
3   Carrie

Scores (fid = food id, uid = user id)
fid uid score
---------------------
1   1   3
1   2   5
2   1   2
3   2   3

现在,我有这个查询,它完美地运作:

SELECT fn.name as Food, ROUND(AVG(s.score),1) AS AvgScore FROM Foods fn LEFT JOIN Scores s ON fn.id = s.fid GROUP BY fn.id ORDER BY fn.name ASC

正如您所知,它列出了Foods的所有名称,包括所有用户对食物的评级的平均值。

我还想添加唯一用户自己的分数。 (假设当Mark登录时,他的uid设置在会话变量或其他任何内容中)

如果您以Mark身份登录,我需要以下输出:

Food    AvgScore    Your Score
Apple   4           3

我已经多次尝试实现这一目标,但我找不到解决方案。我已经了解到,如果你有一个问题,很可能是其他人在你做之前已经问过它,但我不太清楚如何表达这个问题,所以在google搜索时我没有得到答案。非常感谢正确方向的指针。

1 个答案:

答案 0 :(得分:0)

您可以尝试case

SELECT fn.name as Food, 
       ROUND(AVG(s.score),1) AS AvgScore,
       sum(case s.uid = $uid when s.score else 0 end) as YourScore
FROM Foods fn 
LEFT JOIN Scores s ON fn.id = s.fid 
GROUP BY fn.id 
ORDER BY fn.name ASC

$uid当然可变。