2017-10-20 30 views
0

J'essaye de trouver la meilleure requête HiveQL pour obtenir une liste de lignes où une colonne aurait le nombre d'enfants (directs) que ce nœud a. la base de données est hiérarchique donc il ressemble à ceci:Interrogation du nombre de nœuds enfants pour chaque nœud dans Hive

| ID | Some other column | ParentID | 
+-----------------------------------+ 
| 1 | XXXXXXXXXX x X X | NULL  | 
| 2 | XXXXXXXXXX x X X | 1  | 
| 3 | XXXXXXXXXX x X X | 2  | 
| 4 | XXXXXXXXXX x X X | 1  | 

Et je tente de l'interroger à quelque chose comme de sortie ceci:

| ID | Some other column | child count | 
+--------------------------------------+ 
| 1 | XXXXXXXXXX x X X | 2   | 
| 2 | XXXXXXXXXX x X X | 1   | 
| 3 | XXXXXXXXXX x X X | 0   | 
| 4 | XXXXXXXXXX x X X | 0   | 
+0

Pourquoi la balise 'mysql'? Et avez-vous vraiment besoin d'aide avec une requête SQL aussi simple?!? –

+0

Désolé, la balise mysql était une erreur. Cette requête ne me semble pas simple mais @SamsonScharfrichter si vous avez une solution, pouvez-vous la partager avec moi? – cheickmec

Répondre

0

Essayez quelque chose comme ça avec LEFT JOIN.

SELECT a.id, 
     COALESCE (b.child_count, 0) "child count" 
FROM mytable a 
     LEFT JOIN (SELECT parentid, 
         Count(*) child_count 
        FROM mytable 
        GROUP BY parentid) b 
       ON a.id = b.parentid; 
+0

Cela a fonctionné uniquement après avoir enlevé les parenthèses autour du nom de la colonne child count et l'avoir changé en child_count. Merci Kaushik! – cheickmec