我之前已经问过这样的问题,但我不确定如何将它应用到我的代码中。我有两张桌子。我有一个entry
表来存储这样的条目:
id | name | description
1 Test Test entry
在另一张表中,我有一个rating
表,如下所示:
id | entryid | rating
1 | 1 | 1
2 | 1 | -1
我想列出第一张表中的所有条目,但按总评分排序。因此,在此示例中,条目#1的评级为0,因为1 + -1 = 0.有没有办法可以通过查询执行此操作?
答案 0 :(得分: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
答案 1 :(得分: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
因此,您计算所有相关评级的总和,然后按查询内部的总和进行排序。如果您的第一个表的某些行没有任何评级,则将内部联接替换为左联接。