首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SELECT查询中防止重复计数

在SELECT查询中防止重复计数
EN

Stack Overflow用户
提问于 2012-03-08 08:07:57
回答 2查看 211关注 0票数 1

我有以下查询,如您所见,它执行多个Count(CompetitorID)调用。这是一个性能问题,还是SQL Server2008“缓存”了Count?如果这是一个性能问题,是否可以存储Count以防止多次查找?

代码语言:javascript
复制
SELECT EventID,Count(CompetitorID) AS NumberRunners,
    CASE WHEN Count(CompetitorID)<5 THEN 1
         WHEN Count(CompetitorID)>=5 AND Count(CompetitorID)<=7 THEN 2
         ELSE 3 END AS NumberPlacings
FROM Comps
GROUP BY EventID Order By EventID;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-08 08:13:10

更好的做法是只获取一次值,然后在可能的情况下使用它。在您的示例中,您始终可以使用Inner来仅获取一次计数,并根据其值计算其他(派生)列,如下所示:

代码语言:javascript
复制
SELECT  EventID, NumberRunners,
        CASE WHEN NumberRunners <5 THEN 1
             WHEN NumberRunners >=5 AND NumberRunners <=7 THEN 2
             ELSE 3 
        END AS NumberPlacings
  FROM  (
            SELECT  EventID,
                    NumberRunners = Count(CompetitorID)
              FROM  Comps
            GROUP BY EventID
        ) t
Order By EventID;
票数 2
EN

Stack Overflow用户

发布于 2012-03-09 00:21:28

最简单的方法是:

SELECT EventID,Count(distinct CompetitorID)作为NumberRunners,CASE WHEN Count(distinct CompetitorID)<5然后1 WHEN Count(distinct CompetitorID)>=5和Count(distinct CompetitorID)<=7然后2否则3结束为NumberPlacings FROM Comps GROUP BY EventID Order By EventID;

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

https://stackoverflow.com/questions/9611115

复制
相关文章

相似问题

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