sql >> Database teknologi >  >> RDS >> Oracle

Hierarkisk forespørgsel - Optælling af poster, der hører til forældre- og underordnede steder

Her er en mulighed:

Prøvedata først:

SQL> med 2 -- eksempeldata 3 sted (id, parent_id, navn, kontinent) som 4 (vælg 11, null, 'USA' , 'America' fra dual union alle 5 vælg 22, 11 , 'New York' , 'America' fra dual union alle 6 vælg 33, 22 , 'Manhattan', 'America' fra dual union alle 7 vælg 44, null, 'Brasil' , 'America' fra dual union alle 8 vælg 55, 44 , 'Rio' , 'America' fra dual union alle 9 vælg 66, null, 'Frankrig' , 'Europa' fra dual union alle 10 vælg 77, 66 , 'Paris' , 'Europa' fra dual union alle 11 vælg 88 , 66 , 'Nice' , 'Europa' fra dual 12 ), 13 medlemmer (id, place_id) som 14 (vælg 1, 22 fra dual union alle 15 vælg 2, 77 fra dual union alle 16 vælg 3, 33 fra dual union alle 17 vælg 4, 22 fra dual union alle 18 vælg 5, 55 fra dual union alle 19 vælg 6, 55 fra dual union alle 20 vælg 7, 88 fra dual union alle 21 vælg 8, 88 fra dual union alle 22 vælg 9, 88 f rom dual union alle 23 vælg 10, 22 fra dual 24 ), 

Derefter et par CTE'er (se kommentarer):

25 -- naivt, tæl medlemmer af bladknuder 26 naive som 27 (vælg m.place_id, count(*) cnt 28 fra medlem m 29 gruppe af m.place_id 30 ), 31 -- sæt rodforælder node til hver række 32 cbr som 33 (vælg connect_by_root p.id som tpid, 34 p.id, p.parent_id, n.cnt 35 fra sted p venstre join naiv n on p.id =n.place_id 36 connect by prior p. .id =p.parent_id 37 starter med p.parent_id er null 38 rækkefølge efter p.id 39 ), 40 -- hvor mange medlemmer har hver rodnode? 41 sumtpid som 42 (vælg c.tpid, sum(c.cnt) cnt 43 fra cbr c 44 grupper efter c.tpid 45 ) 46 -- join CBR + SUMTPID + PLACE for det endelige resultat 47 vælg c.id, c. parent_id, nvl(c.cnt, s.cnt) medlemsantal, 48 p.navn stednavn, 49 p.kontinent 50 fra cbr c join sumtpid s on s.tpid =c.tpid 51 join place p on p.id =c. id 52 bestilles efter c.id;

Hvilket resulterer i:

ID PARENT_ID MEMBER_COUNT PLACE_NAM CONTINE--------- ---------- ------------ ------- -- ------- 11 4 USA Amerika 22 11 3 New York Amerika 33 22 1 Manhattan Amerika 44 2 Brasil Amerika 55 44 2 Rio Amerika 66 4 Frankrig Europa 77 66 1 Paris Europa 88 66 3 Dejligt Europa8 rækker valgt. SQL>

  1. Oversigt over DBCC SHRINKFILE Command

  2. ORA-01873:den førende præcision

  3. Find ud af, hvilken række der fejler ved at tilføje en begrænsning i MySQL

  4. Er det muligt at erstatte Cloud SQL proxy med Istio proxy?