我有一张投票表,如下所示:
id, type, scope, region, UserId, ItemId, updatedAt, createdAt
我试图根据投票/总票数按百分比计算最高项目。
最后一部分是我想在两个时间戳之间为WHERE
投票的createdAt
条款。
我觉得查询获取统计信息是非常正常的事情。但我不知道该怎么做。
我最接近的是:
SELECT "Votes"."ItemId", count("Votes"."ItemId") tots, count("Votes"."type" = 'up') AS yes, count("Votes"."type" = 'down') AS NO
FROM "Votes"
WHERE "Votes"."ItemId" IN (
SELECT "Votes"."ItemId" FROM "Votes"
)
GROUP BY "Votes"."ItemId"
这远远不够。因此,为什么我会在这里得到一些帮助。在这种东西上找到好的sql资源真的很难。
答案 0 :(得分:2)
您可以使用CASE
语句为每个向上投票使用1,使用-1进行向下投票并获得它们的总和
SELECT ItemId, SUM(CASE [type] WHEN 'up' THEN 1 WHEN 'down' THEN -1 END)
FROM Votes
WHERE createdAt >= 'startTime'
AND createdAt <= 'endTime'
GROUP BY ItemId
答案 1 :(得分:2)
您可以使用条件聚合执行此操作:
select itemid,
sum(case when type = 'up' then 1 else 0 end) up,
sum(case when type = 'down' then 1 else 0 end) down,
sum(1) total,
100.0*sum(case when type = 'up' then 1 else 0 end)/sum(1) upperc,
100.0*sum(case when type = 'down' then 1 else 0 end)/sum(1) downperc
from votes
group by itemid