首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新数据集以添加计算字段

更新数据集以添加计算字段
EN

Stack Overflow用户
提问于 2013-04-25 18:16:49
回答 1查看 27关注 0票数 0

我有一个数据集,如下所示:

代码语言:javascript
复制
SELECT jockey.jockey_skey
, raceresults.place 
FROM   jockey 
       INNER JOIN runnersandriders 
               ON jockey.jockey_skey = runnersandriders.jockey_skey 
       INNER JOIN horse 
               ON runnersandriders.horse_skey = horse.horse_skey 
       INNER JOIN raceresults 
               ON horse.horse_skey = raceresults.horse_skey 
GROUP  BY jockey.jockey_skey, 
          raceresults.place 
ORDER  BY jockey.jockey_skey 

这为我提供了:

代码语言:javascript
复制
Jockey_Skey    Place
1              01
1              04
2              03
2              04
3              02
3              02

我想要做的是计算一个骑师已经跑了多少场比赛,以及他们来过的地方的列表。

所以Jockey 1,参加了两次比赛,第一次和第四次,等等,但对于我的生活,我不记得怎么做了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-25 18:36:06

您可以使用类似下面的代码来获得一行中每个骑师的结果:

代码语言:javascript
复制
SELECT  jockey.jockey_skey,
        TotalRaces = COUNT(*),
        [1sts] = COUNT(CASE WHEN raceresults.place = '01' THEN 1 END),
        [2nds] = COUNT(CASE WHEN raceresults.place = '02' THEN 1 END),
        [3rds] = COUNT(CASE WHEN raceresults.place = '03' THEN 1 END),
        [4ths] = COUNT(CASE WHEN raceresults.place = '04' THEN 1 END),
        [5ths] = COUNT(CASE WHEN raceresults.place = '05' THEN 1 END),
        [6ths] = COUNT(CASE WHEN raceresults.place = '06' THEN 1 END),
        [7ths] = COUNT(CASE WHEN raceresults.place = '07' THEN 1 END),
        [8ths] = COUNT(CASE WHEN raceresults.place = '08' THEN 1 END),
        -- etc
        [NonRunner] = COUNT(CASE WHEN raceresults.place = 'NR' THEN 1 END),
        [Fell] = COUNT(CASE WHEN raceresults.place = 'F' THEN 1 END),
        [PulledUp] = COUNT(CASE WHEN raceresults.place = 'PU' THEN 1 END),
        [Unseated] = COUNT(CASE WHEN raceresults.place = 'U' THEN 1 END),
        [Refused] = COUNT(CASE WHEN raceresults.place = 'R' THEN 1 END),
        [BroughtDown] = COUNT(CASE WHEN raceresults.place = 'B' THEN 1 END)
FROM    jockey 
        INNER JOIN runnersandriders 
            ON jockey.jockey_skey = runnersandriders.jockey_skey 
        INNER JOIN horse 
            ON runnersandriders.horse_skey = horse.horse_skey 
        INNER JOIN raceresults 
            ON horse.horse_skey = raceresults.horse_skey 
GROUP  BY jockey.jockey_skey
ORDER  BY jockey.jockey_skey 

ALternatively您可以使用WITH ROLLUP来获得包含总计的附加行:

代码语言:javascript
复制
SELECT  jockey.jockey_skey,
        raceresults.place,
        [CountOfResult] = COUNT(*)
FROM    jockey 
        INNER JOIN runnersandriders 
            ON jockey.jockey_skey = runnersandriders.jockey_skey 
        INNER JOIN horse 
            ON runnersandriders.horse_skey = horse.horse_skey 
        INNER JOIN raceresults 
            ON horse.horse_skey = raceresults.horse_skey 
GROUP  BY jockey.jockey_skey, raceresults.place
WITH ROLLUP
ORDER  BY jockey.jockey_skey, raceresults.place;

其中NULL值表示总计

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

https://stackoverflow.com/questions/16212126

复制
相关文章

相似问题

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