2009-07-06 61 views
1

我有一张存储用户ID,对象ID和分数(+1或-1)的评分表。现在,当我想显示一个对象列表,其总分数,+1票数和-1票数。最佳查询收视率数据库?

我怎样才能有效地做到这一点,而不必做SELECT COUNT(*)FROM评分WHERE(score = +/- 1 AND object_id = ..)?这是每个对象显示的两个查询,这是不可接受的。数据库设计是否合理?

+0

什么数据库? – 2009-07-06 05:02:49

+0

为了判断设计,我们需要一些设计要求。对于手头的简单任务来说,设计很好,因为有一个简单的解决方案。 – 2009-07-06 05:05:24

回答

1

虽然它并没有解决您的合理设计问题,这里,让你一次这两个方面的查询:

select 
    sum(case when score = 1 then 1 else 0 end) 'positive' 
, sum(case when score = -1 then 1 else 0 end) 'negative' 
, objectId 
from 
    ratings 
where 
    objectId = @objectId ... 
group by 
    objectId 
0
select object_id, 
     sum(case when score = 1 then 1 else 0) upvotes, 
     sum(case when score = -1 then -1 else 0) downvotes, 
     sum(score) 
from ratings 
group by object_id 

也许类似的东西。

0

这应做到:

SELECT 
    UserID, ObjectID, 
    SUM(CASE WHEN score=1 Then 1 Else 0 End) as UpVotes, 
    SUM(CASE WHEN score=-1 Then 1 Else 0 End) as DownVotes, 
FROM YourTable 
GROUP BY UserID, ObjectID