代码之家  ›  专栏  ›  技术社区  ›  Rich

希望对一些字段求和,而忽略其他字段吗

  •  3
  • Rich  · 技术社区  · 16 年前

    我有一个查询,结果是一个长度不同的字段(6,8,10,…)和相应的计数,如下所示:

    "region","repeatLength","count"
    "promoter","6","272387"
    "promoter","8","86929"
    "promoter","10","28337"
    "promoter","12","8873"
    "promoter","14","3080"
    "promoter","16","1098"
    "promoter","18","475"
    "promoter","20","206"
    "promoter","22","133"
    "promoter","24","75"
    "promoter","26","42"
    "promoter","28","32"
    "promoter","30","16"
    "promoter","32","6"
    "promoter","34","9"
    

    此表由此调用生成:

    select region, repeatLength, count(*) as count 
    from alignedRepeats
    group by region, repeatLength;
    

    我希望能够压缩这些结果,以便重复长度<18个完整,但重复长度>=通过对count字段求和,18被聚合到一行中。这是否可以在单个sql查询中完成,而不必创建临时表并合并它们?

    抱歉,如果这是一个简单的问题,我是一个SQL新手。

    4 回复  |  直到 16 年前
        1
  •  4
  •   D'Arcy Rittich    16 年前
    select region, 
        case when repeatLength >= 18 then ">=18" else repeatLength end as repeatLength, 
        count(*) as count  
    from alignedRepeats 
    group by region, 
        case when repeatLength >= 18 then ">=18" else repeatLength end; 
    
        2
  •  1
  •   Mutation Person    16 年前

    select region, repeatLength, 1 as Colname
    from alignedRepeats
    where repeatLength < 18
    union
    select region, repeatLength, count(*)
    from alignedRepeats
    where repeatLength >= 18
    group by region, repeatLength;
    

    但不确定最后一个字段要包含什么,因此“1 as Colname”

        3
  •  1
  •   Carter Medlin    16 年前

    正确答案(已测试)

    select
        region,
        repeatLength,
        count(*) as count
    from
        alignedRepeats
    where
        repeatLength < 18
    group by
        region,
        repeatLength
    union
    select
        region,
        999,
        count(*)
    from
        alignedRepeats
    where
        repeatLength >= 18
    group by
        region
    

    注:用“999”表示聚合行。

        4
  •  0
  •   Beth    16 年前