首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按百分比查询表头项目

问按百分比查询表头项目
EN

Stack Overflow用户
提问于 2015-05-20 12:57:59
回答 2查看 74关注 0票数 3

我有一个投票表,看起来是这样的:

id, type, scope, region, UserId, ItemId, updatedAt, createdAt

我正在尝试根据总票数/总票数按百分比计算前几项的总和。

最后一点是,我希望在两个时间戳之间为createdAt的投票添加一个WHERE子句。

我觉得这是一件非常正常的事情,通过查询来获取统计数据。但我不确定该怎么做。

我得到的最接近的是:

代码语言:javascript
复制
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资源。

EN

回答 2

Stack Overflow用户

发布于 2015-05-20 13:07:31

您可以使用一条CASE语句来为每一次向上投票使用1,为向下投票使用-1,并获取它们的总和

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2015-05-20 13:12:34

您可以使用条件聚合来完成此操作:

代码语言:javascript
复制
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

小提琴http://sqlfiddle.com/#!15/1337d/6

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30340585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档