Хотите суммировать некоторые поля и оставить другие в покое SQL - PullRequest
3 голосов
/ 17 августа 2010

У меня есть запрос, который приводит к полю различной длины (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 не изменились, а длины повторов> = 18 были объединены в одну строку путем суммирования поля счета. Можно ли это сделать в одном SQL-запросе без создания временных таблиц и их объединения?

Извините, если это простой вопрос, я новичок в SQL.

Ответы [ 4 ]

4 голосов
/ 17 августа 2010
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; 
1 голос
/ 17 августа 2010

Правильный ответ (проверено)

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» для обозначения совокупной строки.

1 голос
/ 17 августа 2010

Вам не нужно создавать временную таблицу.Вы можете использовать объединение, хотя:

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 как Colname»

0 голосов
/ 17 августа 2010

Введите другое поле, highGroup, которое равно 0, если repeatlength <= 18, иначе 1, затем сгруппируйте в поле highGroup во внешнем запросе. </p>

...