复杂的MySQL查询?

Sco*_*ott 2 php mysql

我有两张表如下:

我有一个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).我想对最高比例的负面评价做同样的事情,但我相信我可以相应调整一个正面.

Mar*_*ers 7

要按好评级比例的顺序获取"事物",您可以使用此查询:

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值.