2017-05-21 2 views
-1

J'ai une table avec les colonnes:Regroupement en utilisant des fonctions analytiques dans Oracle

  • col1 (clé primaire) Numéro
  • col2 nombre - contient quelques doublons

Ce tableau contient 600 enregistrements. J'essaye de construire une requête où l'utilisateur peut donner n'importe quel compte de groupe (nombre maximum d'enregistrements dans un groupe, eg: 11). Le résultat sera le nombre total d'enregistrements avec un numéro de groupe. Ici les mêmes données dans col2 ne devraient pas être dans deux groupes différents.

Exemple - considérer cette requête:

select col1, col2, round(rownum-1 /: group_size) as group_number from group_tester; 

Cette requête donnera le numéro de groupe, mais je trouve quelques enregistrements avec les mêmes données de tomber dans des groupes différents.

Y at-il un moyen de résoudre mon problème avec les fonctions analytiques?


ici est un si la taille du groupe échantillon de données et résultat attendu

Données-échantillon

col1(student id)       col2(student Rank) 
1            3 
2            3 
3            7 
4            3 
5            2 
6            1 
7            5 
8            5 
9            4 
10            6 
11            9 
12            8 

est 4, je veux que les résultats soient comme ci-dessous

Résultat escompté

col1(student id) col2(student Rank)   group number 
1       3       2 
2       3       2 
3       7       2 
4       3       2 
5       2       1 
6       1       1 
7       5       3 
8       5       3 
9       4       1 
10       6       1 
11       9       3 
12       8       3 

ma tâche est de diviser le nombre d'élèves en groupes de taille 4, mais deux groupes ne devraient pas avoir le même étudiant

+3

mettre à jour votre question ajoutez un échantillon de données correct et le résultat attendu – scaisEdge

Répondre

0

Si vous voulez juste un nombre unique pour chaque rangée dans les regroupements de col2, essayez d'utiliser row_number() sur() comme suit:

row_number() over(partition by col2 order by col1) as group_number 

examiner "partition par" comme similaire à "group by", mais chaque rangée est renvoyé au lieu d'être résumée.