{"id":207,"date":"2021-03-05T11:08:07","date_gmt":"2021-03-05T11:08:07","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/?post_type=chapter&#038;p=207"},"modified":"2021-05-05T13:54:37","modified_gmt":"2021-05-05T13:54:37","slug":"grupeerimine-ja-gruppide-piiramine","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/chapter\/grupeerimine-ja-gruppide-piiramine\/","title":{"raw":"Grupeerimine ja gruppide piiramine","rendered":"Grupeerimine ja gruppide piiramine"},"content":{"raw":"<h2>Grupeerimine<\/h2>\r\nVaatame, kuidas on v\u00f5imalik agregeerivaid funktsioone kasutavate p\u00e4ringute tulemusi grupeerida, mida see \u00fcldse t\u00e4hendab ning kuidas see meile kasulik on.\r\n\r\nEelmise peat\u00fckis katsetasime me j\u00e4rgnevat p\u00e4ringut:\r\n<ul>\r\n \t<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> nimi, <span style=\"color: #000080\"><strong>AVG<\/strong><\/span>(rahvastikuarv) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\r\n<\/ul>\r\nP\u00e4ringu jooksutamisel n\u00e4gime veateadet, kus mainiti m\u00e4rks\u00f5napaari <strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong> ning seda, et tunnus <code>nimi<\/code> peab sellega koos esinema. Jooksutame seega j\u00e4rgnevalt parandatud p\u00e4ringut:\r\n<ul>\r\n \t<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> nimi, <\/code><strong><code><span style=\"color: #000080\">AVG<\/span><\/code><\/strong><code>(rahvastikuarv) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid <span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span> nimi<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\r\n<\/ul>\r\nN\u00e4eme, et selline \"parandatud\" p\u00e4ring t\u00f6\u00f6tab, kuid et see on v\u00f5rdlemisi m\u00f5ttetu, kuna selle tulemus on v\u00f5rdne j\u00e4rgneva, lihtsama p\u00e4ringu tulemusega:\r\n<ul>\r\n \t<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> nimi, rahvastikuarv <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\r\n<\/ul>\r\nKas <strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong> kasutamine ning grupeerimine on seega m\u00f5ttetu? Kindlasti mitte.\r\n\r\nP\u00f5hjus, miks \u00fclalolev m\u00e4rks\u00f5nu <strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong> kasutav p\u00e4ring nii-\u00f6elda huvitav ei ole, on lihtne. P\u00e4ringu jooksutamisel t\u00e4idetakse esmalt <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osa ehk riike grupeeritakse tunnuse <code>nimi<\/code> alusel. See t\u00e4hendab seda, et k\u00f5ik sama nimega riigid pannakse \u00fchte gruppi. Seej\u00e4rel kuvatakse tulemuses iga grupi nimi ning gruppides olevate riikide keskmine rahvastikuarv. Kuna k\u00f5igil riikidel on erinevad nimed, on igas grupis vaid \u00fcks riik ning iga grupi keskmine rahvastikuarv ongi selle riigi rahvastikuarv.\r\n\r\nJooksutame n\u00fc\u00fcd j\u00e4rgnevat p\u00e4ringut:\r\n<ul>\r\n \t<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> <span style=\"color: #000080\"><strong>LEFT<\/strong><\/span>(nimi, <span style=\"color: #0000ff\">1<\/span>), <span style=\"color: #000080\"><strong>AVG<\/strong><\/span>(rahvastikuarv) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid <span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span> <\/code><strong><code><span style=\"color: #000080\">LEFT<\/span><\/code><\/strong><code>(nimi, <span style=\"color: #0000ff\">1<\/span>)<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\r\n<\/ul>\r\nSeekord saime juba palju huvitavama tulemuse. N\u00fc\u00fcd grupeeriti riike nimede algust\u00e4htede alusel ning keskmised rahvastikuarvud arvutati nendesse gruppidesse kuuluvate riikide rahvastikuarvude p\u00f5hjal.\r\n\r\nPane t\u00e4hele, et kasutades p\u00e4ringulause <strong><code><span style=\"color: #970000\">SELECT<\/span><\/code><\/strong> osas mitteagregeerivaid avaldisi v\u00f5i funktsioone, nagu <code><span style=\"color: #000080\"><strong>LEFT<\/strong><\/span>(nimi, <span style=\"color: #0000ff\">1<\/span>)<\/code> v\u00f5i ka lihtsalt <code>nimi<\/code>, peab see kindlasti esinema samal kujul ka <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osas. See ei kehti aga agregeerivate funktsioonide puhul, nagu eelnevas lauses kasutatud <code><span style=\"color: #000080\"><strong>AVG<\/strong><\/span>(rahvastikuarv)<\/code>.\r\n\r\nKasutades grupeerimist v\u00f5ib <strong><code><span style=\"color: #970000\">SELECT<\/span><\/code><\/strong> osas olla mitteagregeerivaid avaldisi v\u00f5i funktsioone vabalt ka mitu, kuid samamoodi tuleb need k\u00f5ik ka <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osas \u00fcles loetleda. See teadmine on ennek\u00f5ike kasulik siis, kui luua p\u00e4ringuid mitme tabeli p\u00f5hjal, mida vaatame j\u00e4rgmises peat\u00fckis.\r\n\r\n[h5p id=\"40\"]\r\n\r\n[h5p id=\"41\"]\r\n\r\nKuna grupeerimine on midagi t\u00e4iesti uut ja p\u00f6\u00f6rab seni \u00f5pitu kohati pea peale, on parim viis selle kasutama \u00f5ppimiseks seda palju harjutada. Proovi ka ise koostada erinevaid huvitavaid p\u00e4ringuid kasutades m\u00e4rks\u00f5nu <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> ja kombineeri seda k\u00f5ige muu varem \u00f5pituga.\r\n<h2>Gruppide piiramine<\/h2>\r\nSiiani oleme me p\u00e4ringuid piiranud vaid m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> abil. Ka \u00f5pitud grupeerimist kasutavaid p\u00e4ringuid saab edukalt piirata, kuid selleks tuleb lisaks m\u00e4rks\u00f5nale <strong><code><span style=\"color: #970000\">WHERE<\/span><\/code><\/strong> kasutada aeg-ajalt ka uut m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>. Kuna kumba neist kasutada, vaatame peatselt.\r\n\r\nJooksuta j\u00e4rgnevat p\u00e4ringut:\r\n<ul>\r\n \t<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> naitleja_id, <span style=\"color: #000080\"><strong>COUNT<\/strong><\/span>(*) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> naitlemine <\/code><strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong><code> naitleja_id <\/code><strong><code><span style=\"color: #970000\">HAVING<\/span> <span style=\"color: #000080\">COUNT<\/span><\/code><\/strong><code>(*) &gt;= <span style=\"color: #0000ff\">25<\/span><span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\r\n<\/ul>\r\nN\u00e4eme, et m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code> ja sellele j\u00e4rgnev osa k\u00e4ib seni\u00f5pitud p\u00e4ringustruktuuri l\u00f5ppu, nii nagu <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> k\u00e4is tavap\u00e4raste p\u00e4ringute puhul.\r\n\r\nAgregeeriva funktsiooni kasutamine koos mitteagregeerivate tunnuste, avaldiste, funktsioonide ja muu taolisega t\u00e4hendab automaatselt seda, et on tarvis grupeerida. Seega saab agregeeriva funktsiooni v\u00e4\u00e4rtuse p\u00f5hjal piiramiseks kasutada vaid m\u00e4rks\u00f5na <strong><code><span style=\"color: #970000\">HAVING<\/span><\/code><\/strong>. Mitteagregeerivate p\u00e4ringu osade p\u00f5hjal piiramiseks saab kasutada nii m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> kui ka m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>. Esimene neist on enne ning teine p\u00e4rast grupeerimist piiramiseks.\r\n\r\nSeega, kui tahta eelnevat p\u00e4ringut piirata ka mitteagregeeriva tunnuse <code>naitleja_id<\/code> p\u00f5hjal, saaks seda teha enne <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osa m\u00e4rks\u00f5naga <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> v\u00f5i p\u00e4rast grupeerimist m\u00e4rks\u00f5naga <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>.\r\n\r\nT\u00e4nu piirangu kasutamisele n\u00e4gime eelneva p\u00e4ringu tulemuses vaid nende n\u00e4itlejate ID-sid, kes on n\u00e4idelnud 25-s v\u00f5i rohkemas Netflixis olevas teoses. M\u00f5nes m\u00f5ttes v\u00f5ib seda t\u00f5lgendada kui populaarsete (v\u00f5i ka t\u00f6\u00f6kate) n\u00e4itlejate nimekirja.\r\n\r\nKui soovime ka teada saada, mis on nende populaarsete n\u00e4itlejate nimed, peaksime (praeguste teadmiste kohaselt) nende ID-d meelde j\u00e4tma ning neid seej\u00e4rel tabelist Isikud otsima hakkama. Kuna tabelis Isikud tabelis on tuhandeid kirjed, on seda v\u00e4ga t\u00fc\u00fctu teha.\r\n\r\n\u00d5nneks on selle protsessi kiirendamiseks v\u00f5imalik tabelite <em>Data<\/em> vaates kasutada filtreerimist, nii nagu alloleval pildil.\r\n\r\n<img class=\"alignnone size-full wp-image-233\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p.png\" alt=\"Tabeli andmete filtreerimine\" width=\"1024\" height=\"768\" \/>\r\n\r\nLuues p\u00e4ringut mitme tabeli p\u00f5hjal on p\u00e4ringulauset v\u00f5imalik koostada ka nii, et selle tulemuses oleksidki koheselt nimed, mitte ID-d. Seda \u00f5pime juba j\u00e4rgmises peat\u00fckis.\r\n\r\nTasub teada, et \u00fcldjoontes t\u00f6\u00f6tab agregeeritud v\u00e4\u00e4rtuse piiramine v\u00e4gagi sarnaselt tavap\u00e4rasele piiramisele ning et see toetab k\u00f5iki varasemalt \u00f5pitud piiramise abim\u00e4rks\u00f5nu.\r\n\r\n[h5p id=\"42\"]\r\n\r\nM\u00f5lemaid piiramiseks m\u00f5eldud m\u00e4rks\u00f5nu, <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> ja <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>, v\u00f5ib (ja sageli ka tuleb) kasutada \u00fches p\u00e4ringulauses erinevate tunnuste, avaldiste, funktsioonide jm alusel piiramiseks. Sealjuures tuleb hoolikalt valida, kumma m\u00e4rks\u00f5na abil midagi piiratakse.\r\n\r\nN\u00fc\u00fcd oleme \u00f5ppinud kasutama grupeerimist agregeerivaid funktsioone kasutavates p\u00e4ringutes ning oskame ka loodud gruppe piirata. Seega saame \u00f5ppida p\u00e4ringute tulemusi j\u00e4rjestama ning seda, kuidas p\u00e4ringuid mitme tabeli p\u00f5hjal koostada.\r\n\r\n&nbsp;","rendered":"<h2>Grupeerimine<\/h2>\n<p>Vaatame, kuidas on v\u00f5imalik agregeerivaid funktsioone kasutavate p\u00e4ringute tulemusi grupeerida, mida see \u00fcldse t\u00e4hendab ning kuidas see meile kasulik on.<\/p>\n<p>Eelmise peat\u00fckis katsetasime me j\u00e4rgnevat p\u00e4ringut:<\/p>\n<ul>\n<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> nimi, <span style=\"color: #000080\"><strong>AVG<\/strong><\/span>(rahvastikuarv) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\n<\/ul>\n<p>P\u00e4ringu jooksutamisel n\u00e4gime veateadet, kus mainiti m\u00e4rks\u00f5napaari <strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong> ning seda, et tunnus <code>nimi<\/code> peab sellega koos esinema. Jooksutame seega j\u00e4rgnevalt parandatud p\u00e4ringut:<\/p>\n<ul>\n<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> nimi, <\/code><strong><code><span style=\"color: #000080\">AVG<\/span><\/code><\/strong><code>(rahvastikuarv) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid <span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span> nimi<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\n<\/ul>\n<p>N\u00e4eme, et selline &#8220;parandatud&#8221; p\u00e4ring t\u00f6\u00f6tab, kuid et see on v\u00f5rdlemisi m\u00f5ttetu, kuna selle tulemus on v\u00f5rdne j\u00e4rgneva, lihtsama p\u00e4ringu tulemusega:<\/p>\n<ul>\n<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> nimi, rahvastikuarv <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\n<\/ul>\n<p>Kas <strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong> kasutamine ning grupeerimine on seega m\u00f5ttetu? Kindlasti mitte.<\/p>\n<p>P\u00f5hjus, miks \u00fclalolev m\u00e4rks\u00f5nu <strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong> kasutav p\u00e4ring nii-\u00f6elda huvitav ei ole, on lihtne. P\u00e4ringu jooksutamisel t\u00e4idetakse esmalt <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osa ehk riike grupeeritakse tunnuse <code>nimi<\/code> alusel. See t\u00e4hendab seda, et k\u00f5ik sama nimega riigid pannakse \u00fchte gruppi. Seej\u00e4rel kuvatakse tulemuses iga grupi nimi ning gruppides olevate riikide keskmine rahvastikuarv. Kuna k\u00f5igil riikidel on erinevad nimed, on igas grupis vaid \u00fcks riik ning iga grupi keskmine rahvastikuarv ongi selle riigi rahvastikuarv.<\/p>\n<p>Jooksutame n\u00fc\u00fcd j\u00e4rgnevat p\u00e4ringut:<\/p>\n<ul>\n<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> <span style=\"color: #000080\"><strong>LEFT<\/strong><\/span>(nimi, <span style=\"color: #0000ff\">1<\/span>), <span style=\"color: #000080\"><strong>AVG<\/strong><\/span>(rahvastikuarv) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> riigid <span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span> <\/code><strong><code><span style=\"color: #000080\">LEFT<\/span><\/code><\/strong><code>(nimi, <span style=\"color: #0000ff\">1<\/span>)<span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\n<\/ul>\n<p>Seekord saime juba palju huvitavama tulemuse. N\u00fc\u00fcd grupeeriti riike nimede algust\u00e4htede alusel ning keskmised rahvastikuarvud arvutati nendesse gruppidesse kuuluvate riikide rahvastikuarvude p\u00f5hjal.<\/p>\n<p>Pane t\u00e4hele, et kasutades p\u00e4ringulause <strong><code><span style=\"color: #970000\">SELECT<\/span><\/code><\/strong> osas mitteagregeerivaid avaldisi v\u00f5i funktsioone, nagu <code><span style=\"color: #000080\"><strong>LEFT<\/strong><\/span>(nimi, <span style=\"color: #0000ff\">1<\/span>)<\/code> v\u00f5i ka lihtsalt <code>nimi<\/code>, peab see kindlasti esinema samal kujul ka <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osas. See ei kehti aga agregeerivate funktsioonide puhul, nagu eelnevas lauses kasutatud <code><span style=\"color: #000080\"><strong>AVG<\/strong><\/span>(rahvastikuarv)<\/code>.<\/p>\n<p>Kasutades grupeerimist v\u00f5ib <strong><code><span style=\"color: #970000\">SELECT<\/span><\/code><\/strong> osas olla mitteagregeerivaid avaldisi v\u00f5i funktsioone vabalt ka mitu, kuid samamoodi tuleb need k\u00f5ik ka <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osas \u00fcles loetleda. See teadmine on ennek\u00f5ike kasulik siis, kui luua p\u00e4ringuid mitme tabeli p\u00f5hjal, mida vaatame j\u00e4rgmises peat\u00fckis.<\/p>\n<div id=\"h5p-40\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-40\" class=\"h5p-iframe\" data-content-id=\"40\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AP_17_kontrollk\u00fcsimus_1\"><\/iframe><\/div>\n<\/div>\n<div id=\"h5p-41\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-41\" class=\"h5p-iframe\" data-content-id=\"41\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AP_17_kontrollk\u00fcsimus_2\"><\/iframe><\/div>\n<\/div>\n<p>Kuna grupeerimine on midagi t\u00e4iesti uut ja p\u00f6\u00f6rab seni \u00f5pitu kohati pea peale, on parim viis selle kasutama \u00f5ppimiseks seda palju harjutada. Proovi ka ise koostada erinevaid huvitavaid p\u00e4ringuid kasutades m\u00e4rks\u00f5nu <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> ja kombineeri seda k\u00f5ige muu varem \u00f5pituga.<\/p>\n<h2>Gruppide piiramine<\/h2>\n<p>Siiani oleme me p\u00e4ringuid piiranud vaid m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> abil. Ka \u00f5pitud grupeerimist kasutavaid p\u00e4ringuid saab edukalt piirata, kuid selleks tuleb lisaks m\u00e4rks\u00f5nale <strong><code><span style=\"color: #970000\">WHERE<\/span><\/code><\/strong> kasutada aeg-ajalt ka uut m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>. Kuna kumba neist kasutada, vaatame peatselt.<\/p>\n<p>Jooksuta j\u00e4rgnevat p\u00e4ringut:<\/p>\n<ul>\n<li><code><span style=\"color: #970000\"><strong>SELECT<\/strong><\/span> naitleja_id, <span style=\"color: #000080\"><strong>COUNT<\/strong><\/span>(*) <span style=\"color: #970000\"><strong>FROM<\/strong><\/span> naitlemine <\/code><strong><code><span style=\"color: #970000\">GROUP BY<\/span><\/code><\/strong><code> naitleja_id <\/code><strong><code><span style=\"color: #970000\">HAVING<\/span> <span style=\"color: #000080\">COUNT<\/span><\/code><\/strong><code>(*) &gt;= <span style=\"color: #0000ff\">25<\/span><span style=\"color: #ff0000\"><strong>;<\/strong><\/span><\/code><\/li>\n<\/ul>\n<p>N\u00e4eme, et m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code> ja sellele j\u00e4rgnev osa k\u00e4ib seni\u00f5pitud p\u00e4ringustruktuuri l\u00f5ppu, nii nagu <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> k\u00e4is tavap\u00e4raste p\u00e4ringute puhul.<\/p>\n<p>Agregeeriva funktsiooni kasutamine koos mitteagregeerivate tunnuste, avaldiste, funktsioonide ja muu taolisega t\u00e4hendab automaatselt seda, et on tarvis grupeerida. Seega saab agregeeriva funktsiooni v\u00e4\u00e4rtuse p\u00f5hjal piiramiseks kasutada vaid m\u00e4rks\u00f5na <strong><code><span style=\"color: #970000\">HAVING<\/span><\/code><\/strong>. Mitteagregeerivate p\u00e4ringu osade p\u00f5hjal piiramiseks saab kasutada nii m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> kui ka m\u00e4rks\u00f5na <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>. Esimene neist on enne ning teine p\u00e4rast grupeerimist piiramiseks.<\/p>\n<p>Seega, kui tahta eelnevat p\u00e4ringut piirata ka mitteagregeeriva tunnuse <code>naitleja_id<\/code> p\u00f5hjal, saaks seda teha enne <code><span style=\"color: #970000\"><strong>GROUP BY<\/strong><\/span><\/code> osa m\u00e4rks\u00f5naga <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> v\u00f5i p\u00e4rast grupeerimist m\u00e4rks\u00f5naga <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>.<\/p>\n<p>T\u00e4nu piirangu kasutamisele n\u00e4gime eelneva p\u00e4ringu tulemuses vaid nende n\u00e4itlejate ID-sid, kes on n\u00e4idelnud 25-s v\u00f5i rohkemas Netflixis olevas teoses. M\u00f5nes m\u00f5ttes v\u00f5ib seda t\u00f5lgendada kui populaarsete (v\u00f5i ka t\u00f6\u00f6kate) n\u00e4itlejate nimekirja.<\/p>\n<p>Kui soovime ka teada saada, mis on nende populaarsete n\u00e4itlejate nimed, peaksime (praeguste teadmiste kohaselt) nende ID-d meelde j\u00e4tma ning neid seej\u00e4rel tabelist Isikud otsima hakkama. Kuna tabelis Isikud tabelis on tuhandeid kirjed, on seda v\u00e4ga t\u00fc\u00fctu teha.<\/p>\n<p>\u00d5nneks on selle protsessi kiirendamiseks v\u00f5imalik tabelite <em>Data<\/em> vaates kasutada filtreerimist, nii nagu alloleval pildil.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-233\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p.png\" alt=\"Tabeli andmete filtreerimine\" width=\"1024\" height=\"768\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p.png 1024w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p-300x225.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p-768x576.png 768w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p-65x49.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p-225x169.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-content\/uploads\/sites\/21\/2021\/03\/8p-350x263.png 350w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Luues p\u00e4ringut mitme tabeli p\u00f5hjal on p\u00e4ringulauset v\u00f5imalik koostada ka nii, et selle tulemuses oleksidki koheselt nimed, mitte ID-d. Seda \u00f5pime juba j\u00e4rgmises peat\u00fckis.<\/p>\n<p>Tasub teada, et \u00fcldjoontes t\u00f6\u00f6tab agregeeritud v\u00e4\u00e4rtuse piiramine v\u00e4gagi sarnaselt tavap\u00e4rasele piiramisele ning et see toetab k\u00f5iki varasemalt \u00f5pitud piiramise abim\u00e4rks\u00f5nu.<\/p>\n<div id=\"h5p-42\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-42\" class=\"h5p-iframe\" data-content-id=\"42\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"AP_17_kontrollk\u00fcsimus_3\"><\/iframe><\/div>\n<\/div>\n<p>M\u00f5lemaid piiramiseks m\u00f5eldud m\u00e4rks\u00f5nu, <code><span style=\"color: #970000\"><strong>WHERE<\/strong><\/span><\/code> ja <code><span style=\"color: #970000\"><strong>HAVING<\/strong><\/span><\/code>, v\u00f5ib (ja sageli ka tuleb) kasutada \u00fches p\u00e4ringulauses erinevate tunnuste, avaldiste, funktsioonide jm alusel piiramiseks. Sealjuures tuleb hoolikalt valida, kumma m\u00e4rks\u00f5na abil midagi piiratakse.<\/p>\n<p>N\u00fc\u00fcd oleme \u00f5ppinud kasutama grupeerimist agregeerivaid funktsioone kasutavates p\u00e4ringutes ning oskame ka loodud gruppe piirata. Seega saame \u00f5ppida p\u00e4ringute tulemusi j\u00e4rjestama ning seda, kuidas p\u00e4ringuid mitme tabeli p\u00f5hjal koostada.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"author":32,"menu_order":7,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-207","chapter","type-chapter","status-publish","hentry"],"part":31,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/207","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/users\/32"}],"version-history":[{"count":73,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/207\/revisions"}],"predecessor-version":[{"id":1350,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/207\/revisions\/1350"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/parts\/31"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapters\/207\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/media?parent=207"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/pressbooks\/v2\/chapter-type?post=207"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/contributor?post=207"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/lisamoodulid\/wp-json\/wp\/v2\/license?post=207"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}