Sql 最佳查询评级数据库?

Sql 最佳查询评级数据库?,sql,database,database-design,Sql,Database,Database Design,我有一个分级表,其中存储了用户ID、对象ID和分数(+1或-1)。现在,当我想显示一个对象列表,其中包含它们的总分、+1投票数和-1投票数 如何在不必从评分中选择计数(*)(分数=+/-1,对象id=…)的情况下有效地执行此操作?每个显示的对象有两个查询,这是不可接受的。数据库设计合理吗?虽然它不能解决您的合理设计问题,但这里有一个查询可以让您同时计算: select sum(case when score = 1 then 1 else 0 end) 'positive' , su

我有一个分级表,其中存储了用户ID、对象ID和分数(+1或-1)。现在,当我想显示一个对象列表,其中包含它们的总分、+1投票数和-1投票数


如何在不必从评分中选择计数(*)(分数=+/-1,对象id=…)的情况下有效地执行此操作?每个显示的对象有两个查询,这是不可接受的。数据库设计合理吗?

虽然它不能解决您的合理设计问题,但这里有一个查询可以让您同时计算:

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

虽然它不能解决您的合理设计问题,但这里有一个查询可以让您同时计算:

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
也许是这样的

也许是这样。

这应该可以:

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
这应该做到:

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

为了判断设计,我们需要一些设计要求。对于手头的简单任务,设计很好,因为有一个简单的解决方案。为了判断设计,我们需要一些设计要求。对于手头的简单任务,设计很好,因为有一个简单的解决方案。(你也需要选择中的object_id。)(为什么这样做。谢谢你,好心的先生。这已经编辑好了。这个问题的正确答案第一次是正确的,比我快48秒,如果我没记错的话。)(你也需要选择中的object_id。)(为什么会这样。谢谢你,好心的先生。这已经编辑好了。这个问题的正确答案第一次是正确的,如果我没记错的话,比我快48秒。)