我有两张表如下:
我有一个RatingsTable,它包含一个ratingname和一个位,无论是正面还是负面评级:
RatingsTable ---------------------- ratingname ispositive ---------------------- Good 1 Bad 0 Fun 1 Boring 0
我有一个FeedbackTable,其中包含对事物的反馈:人员评级,评级和评级.如果是基于RatingsTable的正面或负面评级,则可以确定反馈.
FeedbackTable --------------------------------- username thing ratingname --------------------------------- Jim Chicken Good Jim Steak Bad Ted Waterskiing Fun Ted Hiking Fun Nancy Hiking Boring
我正在尝试为以下内容编写有效的MySQL查询:
在页面上,我想显示具有最高正面评级比例的顶级"事物".我想确保反馈表中的项目是独一无二的......这意味着,如果Jim已将Chicken Good评为20次......它应该只计算一次.在某些时候,我还想要为此页面计算最小数量的评级(至少10).我想对最高比例的负面评价做同样的事情,但我相信我可以相应调整一个正面.
要按好评级比例的顺序获取"事物",您可以使用此查询:
SELECT thing, SUM(ispositive) / COUNT(*) AS proportion_positive
FROM (SELECT DISTINCT username, thing, ratingname FROM FeedbackTable) T1
JOIN RatingsTable T2
ON T1.ratingname = T2.ratingname
GROUP BY thing
ORDER BY proportion_positive DESC
Run Code Online (Sandbox Code Playgroud)
对于您的示例数据,它返回:
thing proportion_positive Chicken 1.0000 Waterskiing 1.0000 Hiking 0.5000 Steak 0.0000
要在结果中显示事物之前要求至少10票,请在以下后面添加以下行GROUP BY:
HAVING COUNT(*) >= 10
Run Code Online (Sandbox Code Playgroud)
要使负面评级的比例SUM(ispositive)变为SUM(NOT ispositive).
注意:为您的投票表添加唯一约束可能更好,而不是仅选择disctinct值.