0

我知道以前有人问过这样的问题,但我不确定如何将它应用到我的代码中。我有两张桌子。我有一个entry存储这样的条目的表:

id | name | description
1    Test   Test entry

在另一个表中,我有一个rating这样的表:

id | entryid | rating
1  | 1       | 1
2  | 1       | -1

我想列出第一个表中的所有条目,但按总评分排序。因此,在此示例中,条目 #1 的评分为 0,因为 1 + -1 = 0。有没有办法可以通过查询来做到这一点?

4

2 回答 2

2

检查这个SQLFIDDLE DEMO。您只需要使用Sum来计算每个的所有评级entryID

询问:

select r.entryid, sum(r.rating)
from ratings r
group by r.entryid
;

结果:

ENTRYID     SUM(R.RATING)
1           -1
2           2

最终查询:

select e.id, e.name, sum(r.rating)
from entry e
left join 
ratings r
on r.entryid = e.id
group by e.id
;

最终结果:

ID  NAME    SUM(R.RATING)
1   Test1   -1
2   Test2   2
于 2012-12-31T21:37:24.677 回答
0

您可以使用这样的内联视图:

select id, `name`, description from (
select t1.id, t1.`name`, t1.description, sum(t2.rating) as sum_rating
from
t1 inner join t2 on t1.id = t2.entryid
group by t1.id, t1.`name`, t1.description
) as t 
order by sum_rating desc

因此,您计算所有相关评级的总和,然后从查询的内部按这些总和排序。如果您的第一个表的某些行没有任何评级,则将内连接替换为左连接。

于 2012-12-31T21:34:44.610 回答