通过另一个表的总和来排序SELECT语句?

时间:2012-12-31 21:18:41

标签: mysql

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

id | name | description
1    Test   Test entry

在另一张表中,我有一个rating表,如下所示:

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

我想列出第一张表中的所有条目,但按总评分排序。因此,在此示例中,条目#1的评级为0,因为1 + -1 = 0.有没有办法可以通过查询执行此操作?

2 个答案:

答案 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

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