2013-06-11 4 views
0

Un groupe est défini par les colonnes a, b et c. Les colonnes x, y et z de chaque groupe sont les mêmes. Exemple:Agrégation de groupe et colonnes descriptives

a|b|c|x|y|z| .... 
1 1 1 p r s 
1 1 1 p r s 
1 1 1 p r s 
2 1 2 t u v 
2 1 2 t u v 

Je cherche à obtenir les résultats suivants mais sans utiliser la fonction d'agrégat (max (tx), ...)

select t.a, t.b, t.c,count(*), t.x, t.y, t.z, .... 
from t 
group by t.a, t.b, t.c; 

est-il une autre fonction qui peut être utilisé dans la sélection déclaration pour inclure les colonnes x, y et z? Aimeriez-vous utiliser une autre jointure pour ajouter la colonne descriptive?

+0

Pourquoi votre requête est-elle associée à Netezza et SQLServer? Lequel utilisez-vous? Aussi, réalisez-vous que 'count (*)' est une fonction agrégée? –

+0

Mark ne pensez-vous pas que la question peut convenir aux deux communautés? – martez

Répondre

0

Si les colonnes sont les mêmes au sein d'un groupe, il suffit de les inclure dans la clause group by:

select t.a, t.b, t.c,count(*), t.x, t.y, t.z, .... 
from t 
group by t.a, t.b, t.c, t.x, t.y, t.z 

Si vous voulez une ligne aléatoire avec le nombre, utilisez les fonctions de fenêtre:

select t.* 
from (select t.*, 
      count(*) over (partition by a, b, c) as cnt, 
      row_number() over (partition by a, b, c order by (select NULL)) as seqnum 
     from t 
    ) t 
where seqnum = 1 

Le order by (select NULL) est utilisé dans SQL Server. Je ne suis pas sûr que cela fonctionnera dans Netezza. Toute expression fonctionnera pour l'ordre par.

+0

Le problème de cette approche serait que si une colonne descriptive (t.x, t.y, t.z, ..) différait d'autres colonnes du même groupe, cela aboutirait à un nouveau groupe. Dans ce cas, l'exemple ci-dessous donnerait deux groupes au lieu d'un. 'a | b | c | x | y | z | 1 1 1 p r s 1 1 1 p r s 1 1 1 p r sa' – martez

+0

@martez. . . Et si tel était le cas, alors cette affirmation dans la question ne serait pas vraie: "Les colonnes x, y et z de chaque groupe sont les mêmes.". –

+0

Vous avez raison. Mais dans le cas où une erreur survient dans x, y, z un nouveau groupe/élément sera ajouté ce qui n'est pas correct. Dans le cas où group by serait défini sur seulement les colonnes a, b, c ce comportement ne se produirait pas. – martez

Questions connexes