Vous voulez résumer certains champs et laisser les autres seuls SQL

voix
3

J'ai une requête qui se traduit par un domaine de longueurs variables (6, 8, 10, ...) et les chiffres respectifs comme on le voit ci-dessous:

Count région, repeatLength,
Promoteur, 6, 272387
Promoteur, 8, 86929
Promoteur, 10, 28337
Promoteur, 12, 8873
Promoteur, 14, 3080
Promoteur, 16, 1098
Promoteur, 18, 475
Promoteur, 20, 206
Promoteur, 22, 133
Promoteur, 24, 75
Promoteur, 26, 42
Promoteur, 28, 32
Promoteur, 30, 16
Promoteur, 32, 6
Promoteur, 34, 9

Ce tableau a été généré par cet appel:

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

Je voudrais être capable de condenser ces résultats afin que les longueurs de répétition <18 sont intacts, mais les longueurs de répétition> = 18 sont regroupées en une seule ligne en additionnant le champ de comptage. Est-ce possible de le faire en une seule requête SQL sans tables temporaires et les unioning?

Désolé si cela est une question simple, je suis un débutant SQL.

Créé 17/08/2010 à 16:53
source utilisateur
Dans d'autres langues...                            


4 réponses

voix
4

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; 
Créé 17/08/2010 à 17:00
source utilisateur

voix
1

La réponse correcte (testé)

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

Remarque: L'utilisation de « 999 » pour la ligne indiquée globale.

Créé 17/08/2010 à 17:20
source utilisateur

voix
1

Vous ne devriez pas avoir à créer une table temporaire. Vous pouvez utiliser une union, si:

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;

Je ne sais pas ce que vous voulez que le dernier champ pour contenir, cependant, d'où « 1 COLNAME »

Créé 17/08/2010 à 17:02
source utilisateur

voix
0

L'introduction d'un autre champ, HighGroup, qui est égal à 0 si repeatlength <= 18, sinon 1, puis le groupe de highGroupfield dans une requête externe.

Créé 17/08/2010 à 16:57
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more