Sql санауын мысалдар бойынша топтастыру. Пәрмендер тобын бөлім бойынша ТАҢДАУ

Бұл мақалада мен сізге деректердің қалай топтастырылғанын, топты қалай дұрыс пайдалану керектігін және SQL сұрауларының ішінде болуын бірнеше сұраулар мысалында айтып беремін.

Мәліметтер қорындағы ақпараттың көпшілігі егжей-тегжейлі түрде сақталады. Дегенмен, жиі есептерді алу қажеттілігі туындайды. Мысалы, пайдаланушы пікірлерінің жалпы санын немесе қоймалардағы тауарлардың санын біліңіз. Осыған ұқсас тапсырмалар өте көп. Сондықтан, SQL тілі мұндай жағдайларды сәйкесінше топтастыруға және алынған деректер топтарын сүзуге мүмкіндік беретін конструкциялары бойынша топтауды қамтамасыз етеді.

Дегенмен, оларды пайдалану бағдарламалық жасақтаманың жаңа авторлары үшін көптеген қиындықтар тудырады. Олар алынған нәтижелерді және деректерді топтау механизмінің өзін дұрыс түсінбейді. Сондықтан, не болатынын және қалай болатынын іс жүзінде анықтайық.

Мысалдың бөлігі ретінде мен тек бір кестені қарастырамын. Себебі қарапайым, бұл операторлар алынған деректер үлгісіне қолданылған (кесте жолдарын біріктіріп, оларды сүзгеннен кейін). Сонымен, where және join операторларын қосу мәнді өзгертпейді.

Абстрактілі мысалды елестетіп көрейік. Сізде форум пайдаланушыларының жиынтық кестесі бар делік. Оны userstat деп атаймыз және ол келесідей көрінеді. Маңызды мәселе, пайдаланушы тек бір топқа жатады деп есептейміз.

user_name - пайдаланушы аты

forum_group - топ атауы

mess_count - хабарламалар саны

is_have_social_profile - форум профилінде әлеуметтік желідегі бетке сілтеме бар ма

Көріп отырғаныңыздай, кесте қарапайым және калькулятордың көмегімен көп нәрсені өзіңіз есептей аласыз. Дегенмен, бұл тек мысал және бар болғаны 10 жазба бар. Нақты деректер қорларында жазбаларды мыңмен өлшеуге болады. Сонымен, сұраулардан бастайық.

Топтау арқылы таза топтау

Әр топтың мәнін, атап айтқанда топтағы пайдаланушылардың орташа рейтингін және форумда қалған хабарламалардың жалпы санын білуіміз керек деп елестетіп көрейік.

Біріншіден, SQL сұрауын түсінуді жеңілдету үшін қысқаша ауызша сипаттама. Сонымен, сіз форум топтары бойынша есептелген мәндерді табуыңыз керек. Тиісінше, осы он жолдың барлығын үш түрлі топқа бөлу керек: әкімші, модер, пайдаланушы. Бұл әрекетті орындау үшін сұраудың соңына forum_group өрісінің мәндері бойынша топтауды қосу керек. Сондай-ақ жиынтық деп аталатын функцияларды пайдаланып таңдау үшін есептелген өрнектерді қосыңыз.

Өрістерді және есептелген бағандарды көрсетіңіз forum_group, avg(raiting) орташа_рейтинг, sum(mess_count) жалпы_меңгерім_саны ретінде -- пайдаланушы статистикасынан кестені көрсетіңіз -- форум_тобы бойынша өріс тобы бойынша топтауды көрсетіңіз

Сұрауда құрылым бойынша топты пайдаланғаннан кейін таңдаудағы топтан кейін көрсетілген өрістерді біріктіру функцияларын қолданбай ғана пайдалануға болатынын ескеріңіз. Қалған өрістер жиынтық функциялардың ішінде көрсетілуі керек.

Мен екі жиынтық функцияны да қолдандым. AVG – орташа мәнді есептейді. Ал SUM – қосындыны есептейді.

форум_тобыорташа_рейтингжалпы_бестік_саны
админ 4 50
модератор 3 50
пайдаланушы 3 150

1. Біріншіден, бастапқы кестенің барлық жолдары forum_group өрісінің мәндеріне сәйкес үш топқа бөлінді. Мысалы, әкімші тобында үш пайдаланушы болды. Модератордың ішінде де 3 жол бар. Ал пайдаланушылар тобының ішінде 4 жол (төрт қолданушы) болды.

2. Әр топқа жиынтық функциялар қолданылды. Мысалы, әкімші тобы үшін орташа рейтинг келесідей есептелді (2 + 5 + 5)/3 = 4. Хабарламалар саны (10 + 15 + 25) = 50 ретінде есептелді.

Көріп отырғаныңыздай, күрделі ештеңе жоқ. Дегенмен, біз тек бір топтау шартын қолдандық және топ бойынша сүзгіден өткізбедік. Ендеше келесі мысалға көшейік.

Топтау арқылы топтастыру және бар топтарын сүзу

Енді деректерді топтастырудың күрделі мысалын қарастырайық. Пайдаланушыларды әлеуметтік әрекеттерге тарту үшін әрекеттердің тиімділігін бағалау керек делік. Қарапайым тілмен айтқанда, топтағы қанша қолданушы өз профиліне сілтеме қалдырғанын және қаншасы еленбеген хаттарды және т.б. Дегенмен, нақты өмірде мұндай топтар көп болуы мүмкін, сондықтан біз назардан тыс қалуға болатын топтарды сүзгілеуіміз керек (мысалы, тым аз адамдар сілтеме қалдырмаған; неге толық есепті шатастыру керек). Менің мысалда бұл тек бір пайдаланушысы бар топтар.

Біріншіден, біз SQL сұрауында не істеу керектігін ауызша сипаттаймыз. Түпнұсқа userstat кестесінің барлық жолдарын келесі критерийлерге сәйкес бөлу керек: топ атауы және әлеуметтік профильдің болуы. Сәйкесінше, кесте деректерін forum_group және is_have_social_profile өрістері бойынша топтау қажет. Дегенмен, бір адам болатын топтар бізді қызықтырмайды. Сондықтан мұндай топтарды сүзгіден өткізу керек.

Ескерту: Бұл мәселені тек бір өріс бойынша топтастыру арқылы шешуге болатынын білу керек. Егер сіз корпус конструкциясын қолдансаңыз. Дегенмен, осы мысалдың шеңберінде топтастыру мүмкіндіктері көрсетілген.

Мен де бірден бір маңызды жайтты ашып айтқым келеді. Жеке өрістер бойынша емес, жиынтық функцияларды пайдаланған кезде ғана have арқылы сүзуге болады. Басқаша айтқанда, бұл қай жерде құрастыру емес, бұл жеке жазбалар емес, жолдар топтары үшін сүзгі. Ішіндегі шарттар «немесе» және «және» арқылы ұқсас түрде көрсетілгенімен.

SQL сұрауы осылай көрінеді

Өрістерді және есептелген бағандарды көрсету форум_тобын, әлеуметтік_профильді, санауды(*) барлығы ретінде таңдаңыз -- Пайдаланушы статистикасынан кестені көрсетіңіз -- өрістер тобы бойынша топтауды форум_тобы, is_әлеуметтік_профилі бойынша көрсетіңіз -- count(*) > 1 болатын топ сүзгісін көрсетіңіз

Құрылым бойынша топтан кейінгі өрістер үтірмен бөлінгенін ескеріңіз. Таңдауда өрістерді көрсету алдыңғы мысалдағыдай орындалады. Мен сондай-ақ топтардағы жолдар санын есептейтін жиынтық функцияны қолдандым.

Міне, нәтиже:

форум_тобыәлеуметтік_профиль_баржалпы
админ 1 2
модератор 1 2
пайдаланушы 0 3

Бұл нәтиженің қалай болғанын кезең-кезеңімен қарастырайық.

1. Бастапқыда 6 топ алынды. Forum_group топтарының әрқайсысы is_have_social_profile өрісінің мәндеріне негізделген екі ішкі топқа бөлінді. Басқаша айтқанда, топтар: , , , , , .

Ескерту: Айтпақшы, міндетті түрде 6 топ болмас еді, мысалы, барлық әкімшілер профильді толтырса, онда 5 топ болады, өйткені is_have_social_profile өрісінде әкімші тобының пайдаланушылары үшін бір ғана мән болады.

2. Содан кейін әр топқа сүзгі шарты қолданылды. Сондықтан келесі топтар алынып тасталды: , , . Әрбір мұндай топтың ішінде бастапқы кестенің тек бір жолы болған.

3. Осыдан кейін қажетті мәліметтер есептеліп, нәтиже алынды.

Көріп отырғаныңыздай, пайдалану қиын ештеңе жоқ.

Дерекқорға байланысты бұл құрылымдардың мүмкіндіктері әртүрлі болуы мүмкін екенін білу керек. Мысалы, жиынтық функциялар көбірек болуы мүмкін немесе топтау ретінде жеке өрістерді емес, есептелген бағандарды көрсетуге болады. Бұл ақпарат спецификацияда қарастырылуы керек.

Енді сіз деректерді топтау әдісімен топтастыруды, сондай-ақ бар көмегімен топтарды сүзуді білесіз.


Маңызды командалардың бірі SQL – GROUP BY. Бұл құрылым кестеден әрқайсысында көрсетілген функциялар бар жолдардың бөлек топтарын таңдау үшін жасалған ТАҢДАУ(Мысалы, COUNT(), MIN()тағыда басқа). Нақты мысалдарды қарастырайық.

Бізде супермаркеттер үстелі бар делік:

  • id- бірегей идентификатор.
  • shop_id- супермаркеттің бірегей идентификаторы.
  • бағасы- сүт бағасы.

Әр супермаркетте сүттің орташа бағасын білуіміз керек. ескертіп қой shop_idқайталануы мүмкін (ақыр соңында, супермаркеттер желілері бар). Сондықтан сәйкес топ құруымыз керек shop_id, және осы топтағы әрбір жол үшін орташа бағаны есептеңіз.

Түпнұсқа кесте келесідей көрінеді:

Осылайша, біз белгілі бір супермаркеттер желісіндегі (немесе бір дүкендегі) орташа бағаны білдік.

Тағы бір кең таралған қолдану кестелерден бірегей жазбаларды алу болып табылады. Алдыңғы мысалда сіз алынған үлгіде көшірмелердің жоқ екенін байқадыңыз shop_id, ал бастапқы кестеде олар болды.

Бізде пайдаланушылармен кесте бар делік:

  • id- бірегей идентификатор.
  • электрондық пошта - электрондық поштапайдаланушы.
  • хэш- бірегей пайдаланушы хэші.

Ал біздің алдымызда таңдау міндеті тұрды бірегей пайдаланушылар, және ерекше тіркелгілер емес, ерекше бірегей адамдар. Өйткені, бір адам болуы мүмкін 100 әртүрлі шоттар электрондық поштажәне, әрине, id. А хэш- бұл оны қайталанбас тұлға ретінде сипаттайтын белгілі бір сызық.

Сондықтан біз таңдауымыз керек бірегей хэш бар барлық жазбалар. Бұл үшін ол қайтадан пайдаланылады ТОПТАУ:

* "кесте" тобынан "хэш" арқылы ТАҢДАҢЫЗ

Нәтижесінде бірегейлері ғана алынады хэш, яғни 2 бірдей хэшСіз оны алынған үлгіде көрмейсіз.

Мұнда екі практикалық SQL жүйесінде GROUP BY қолдану мысалыбіз оны реттедік.

Біз көптеген материалдарды қарастырдық SQL, атап айтқанда Transact-SQL, бірақ біз шынымен қарапайым тақырыпты қозғамадық деректерді топтау GROUP BY. Сонымен бүгін біз деректерді топтау үшін оператор бойынша топты қалай пайдалану керектігін үйренеміз.

Көптеген жаңадан бастаған бағдарламашылар SQL-мен бетпе-бет келгенде, GROUP BY операторының көмегімен деректерді топтау мүмкіндігі туралы білмейді, бірақ бұл мүмкіндік тәжірибеде жиі қажет болса да, осыған байланысты біздің бүгінгі сабағымыз әдеттегідей мысалдармен берілген. Бұл операторды пайдалануды үйрену сізге оңайырақ және оңай болды, өйткені сіз оны міндетті түрде кездестіресіз. Егер сізді SQL тақырыбы қызықтырса, мен бұрын айтқанымдай, біз оны бірнеше рет қозғадық, мысалы, SQL тілі - JOIN немесе Бірлесу және барлығын біріктіру мақалаларында, сондықтан сіз осы материалмен таныса аласыз. .

Ал кіріспе үшін кішкене теория.

GROUP BY операторы дегеніміз не

ТОПТАУоператор болып табылады ( немесе дизайн, қайсысы сізге ыңғайлы болса) Сұраудағы қосынды, макс, мин, санау және т.б. сияқты жиынтық функцияларды пайдалану кезінде деректерді өріс бойынша топтауға арналған SQL.

Өздеріңіз білетіндей, жиынтық функциялар мәндер жиынымен жұмыс істейді, мысалы, қосынды барлық мәндерді қосады. Бірақ қандай да бір шарт бойынша немесе бірден бірнеше шарттар бойынша қосу керек делік, сондықтан жиынтық функциялардың нәтижелерін шығаратын өрістер бойынша барлық деректерді топтау үшін оператор бойынша топ қажет.

Меніңше, мұның бәрін мысалдар арқылы талдасақ, түсініктірек болады, сондықтан мысалдарға көшейік.

Ескерту! Біз барлық мысалдарды Management Studio SQL Server 2008 бағдарламасында жазамыз.

GROUP BY операторын қолдану мысалдары

Алдымен, group by арқылы таңдау сұрауларымызды жіберетін деректермен сынақ кестесін жасап, толтырайық. Кесте мен деректер, әрине, жалған, мысалы.

Кесте құру

КЕСТЕ ЖАСАУ .( NULL, (50) NULL, NULL, NULL) ON GO

Мен оны келесі ақпаратпен толтырдым:

  • Id – жазба идентификаторы;
  • Аты-жөні – қызметкердің тегі;
  • Сумма - қолма-қол ақша;
  • Жүлде – бұл қаражаттың белгісі (мысалы, 1-Жалақы; 2-Бонус).

Сұрау бойынша топты пайдаланып деректерді топтау

Ал ең басында синтаксисті қарастырайық бойынша топтастыру, яғни. бұл құрылысты қайда жазу керек:

Синтаксис:

таңдаңыз агрегаттық функциялар

бастап көзі

Қайда Таңдау шарттары

Топтастыру өрістерді топтастыру

Бар Жиынтық функциялардың шарттары

Бойынша сұрыптау өрістерді сұрыптау

Енді топтастыруды қолданбай, белгілі бір қызметкердің барлық қаражатын қорытындылау қажет болса, біз келесі сұрауды жібереміз:

СУМ(қосынды) сынау_кестесінен жиынтық ретінде ТАҢДАҢЫЗ WHERE name="Иванов"

Ал егер басқа қызметкерді жинақтау қажет болса, біз жай ғана шартты өзгертеміз. Келісіңіз, егер мұндай қызметкерлер көп болса, неге әрқайсысын қорытындылау керек, бұл қандай да бір түсініксіз, сондықтан оператор бойынша топ бізге көмекке келеді. Біз өтініш жазамыз:

СУММ(қосынды)қосынды ретінде ТАҢДАҢЫЗ, аты FROM test_table GROUP BY атауы

Өздеріңіз байқағандай, біз ешқандай шарттарды жазбаймыз және біз барлық қызметкерлерді қаражаттың жиынтық сомасымен бірден көрсетеміз, бұл анық.

Ескерту! Бірден ескертемін, жиынтық функцияларға қоса, сұрауда қанша өріс жазатынымызға (яғни топтастыру өрістеріне) байланысты құрылым бойынша топтағы өрістердің бірдей санын жазамыз. Біздің мысалда біз бір өрісті көрсетеміз, сондықтан топ бойынша біз тек бір өрісті (атауы) көрсеттік, егер біз бірнеше өрістерді көрсететін болсақ, онда олардың барлығы құрылым бойынша топта көрсетілуі керек (оны келесіде көресіз); мысалдар).

Сіз сондай-ақ басқа функцияларды пайдалана аласыз, мысалы, алынған қаражаттың жалпы сомасымен белгілі бір қызметкерге қанша рет қаражат түскенін санаңыз. Ол үшін қосынды функциясынан басқа санау функциясын да қолданамыз.

SUM(қосынды) [Жалпы қаражат] ретінде, COUNT(*) [Түбіртектер саны] ретінде, Аты-жөні [Қызметкер] сынақ_кестесінен GROUP BY атауы бойынша ТАҢДАҢЫЗ

Бірақ бұл билік үшін жеткіліксіз делік, олар да дәл осылай қорытындылауды сұрайды, бірақ атрибут бойынша топтастыру арқылы, яғни. Бұл қандай ақша (жалақы немесе бонус), бұл үшін біз жай ғана топтастыруға басқа өрісті қосамыз, ал жақсы қабылдау үшін біз қызметкер бойынша сұрыптауды қосамыз және нәтиже келесідей болады:

СОМДАНЫ(қосынды) [Жалпы қаражат] ретінде, COUNT(*) [Түбіртектер саны], Аты-жөні [Қызметкер] , Жүлде [Дереккөз] сынақ_кестесінен GROUP BY BY, жүлде ТАПСЫРЫС АТЫ БОЙЫНША ТАҢДАҢЫЗ

Енді бәрі көрсетіледі, яғни. қызметкер қанша ақша алды, қанша рет және қай көзден.

Енді біріктіру үшін топтастыру арқылы одан да күрделі сұрауды жазайық, сонымен қатар осы дереккөздің атын қосамыз, өйткені төлсипат идентификаторларына сүйене отырып, қаражаттың қай көзден келгені анық емес екеніне келісесіз. Ол үшін құрылысты қолданамыз іс.

СОМДАНЫ(қосынды) [Жалпы қолма-қол ақша], COUNT(*) [Түбіртектер саны], Аты-жөні [Қызметкер], ЖАҒДАЙ ҚАҒИДА жүлде = 1, содан кейін "Жалақы" ҚАШАН жүлде = 2, содан кейін "Бонус" ҚАЙСЫ "Дерек көзі жоқ" СОҢЫ ТАҢДАҢЫЗ. [Дереккөз] АТ БОЙЫНША ТОПТЫРУ тест_кестесінен, жүлде Аты бойынша ТАПСЫРЫС

Қазір бәрі түсінікті және тіпті жаңадан бастаушылар үшін де қиын емес.

Сонымен қатар жиынтық функциялардың соңғы нәтижелерінің шарттарына тоқталайық ( бар). Басқаша айтқанда, біз жолдардың өзін таңдау үшін емес, функциялардың соңғы мәні үшін шарт қосамыз, біздің жағдайда бұл қосынды немесе санау. Мысалы, біз бірдей нәрсені көрсетуіміз керек, бірақ тек барлар «жалпы қаражат» 200-ден астам. Ол үшін бар шартын қосыңыз:

СОМДАНЫ(қосынды) [Жалпы қолма-қол ақша] ретінде, COUNT(*) [Түбіртектер саны], Аты-жөні [Қызметкер], ЖАҒДАЙ ҚАҒИДА жүлде = 1, содан кейін "Жалақы" ҚАШАН жүлде = 2 болса, содан кейін "Бонус" ҚАЙСЫ "Дерек көзі жоқ" СОҢЫН ТАҢДАҢЫЗ. [Дереккөз] сынақ_кестесінен GROUP BY аты бойынша, жүлде --топ БАР ҚОСЫНДЫ(қосынды) > 200 --АТЫ БОЙЫНША ТАПСЫРУ опциясын таңдаңыз --сұрыптау

Енді біз 200-ден асатын қосындының (қосындының) барлық мәндерін көрсеттік, бәрі қарапайым.

Бүгінгі сабақтан кейін дизайнды қалай және не үшін қолдану керектігін түсіндім деп үміттенемін бойынша топтастыру. Іске сәт! Келесі мақалаларда SQL тілін зерттеуді жалғастырамыз.

Соңғы жаңарту: 19.07.2017

T-SQL келесі ресми синтаксисті пайдаланып, деректерді топтау үшін GROUP BY және HAVING операторларын пайдаланады:

Кестеден бағандарды ТАҢДАУ

ТОПТАУ

GROUP BY сөйлемі жолдардың қалай топталатынын анықтайды.

Мысалы, өнімдерді өндіруші бойынша топтастырайық

Өндірушіні ТАҢДАУ, COUNT(*) үлгілер ретінде Өндіруші бойынша өнімдер тобынан

SELECT операторындағы бірінші баған – Өндіруші топтың атын, ал екінші баған – ModelsCount топтағы жолдар санын есептейтін Санау функциясының нәтижесін көрсетеді.

SELECT операторында қолданылатын кез келген баған (жиынтық функциялардың нәтижесін сақтайтын бағандарды есептемегенде) GROUP BY сөйлемінен кейін көрсетілуі керек екенін ескерген жөн. Мәселен, мысалы, жоғарыдағы жағдайда, Өндіруші бағаны ТАҢДАУ және GROUP BY тармақтарында көрсетілген.

Ал егер SELECT операторы бір немесе бірнеше бағандарда таңдалса және жиынтық функцияларды пайдаланса, онда GROUP BY сөйлемін пайдалану керек. Осылайша, келесі мысал жұмыс істемейді, себебі онда топтау өрнегі жоқ:

Өндірушіні ТАҢДАҢЫЗ, COUNT(*) ӨНІМДЕРДЕН САНАЛУ

Тағы бір мысал, өнімдер саны бойынша топтастыруды қосайық:

Өндірушіні, өнім саны, COUNT(*) үлгілер ретінде ТАҢДАУ Өнімдер тобынан өндіруші, өнім саны

GROUP BY сөйлемі бірнеше бағандар бойынша топтаса алады.

Топтастырылған бағанда NULL мәні болса, NULL мәні бар жолдар бөлек топты құрайды.

GROUP BY сөйлемі WHERE сөйлемінен кейін, бірақ ORDER BY сөйлемінен бұрын келуі керек екенін ескеріңіз:

Өндірушіні ТАҢДАҢЫЗ, COUNT(*) Үлгілер РЕТІНДЕГІ ӨНІМДЕРДІҢ ҚАЙДАСЫ Бағасы > 30000 ӨНДІРУШІ БОЙЫНША ТОБЫ. Модельдер саны бойынша ТАПСЫРЫС БЕРУ

Топтық сүзгілеу. БАР

Оператор БАР шығыс нәтижеге қандай топтар қосылатынын анықтайды, яғни топтарды сүзеді.

HAVING-ті қолдану көптеген жағынан WHERE-ды қолдануға ұқсас. Жолдарды сүзу үшін тек WHERE пайдаланылады, топтарды сүзу үшін HAVING қолданылады.

Мысалы, 1-ден көп үлгі анықталған өндіруші бойынша барлық өнім топтарын табайық:

Өндірушіні ТАҢДАУ, COUNT(*) үлгілер РЕТІНДЕ САН(*) ӨНДІРУШІ БОЙЫНША Өнімдер тобынан САН(*) > 1

Бұл жағдайда бір командада WHERE және HAVING өрнектерін пайдалана аламыз:

Өндірушіні ТАҢДАҢЫЗ, COUNT(*) Үлгілер РЕТІНДЕГІ ӨНІМДЕРДЕН САНАҢЫЗ Бағасы * Өнім саны > 80000 САН(*) БАР өндіруші бойынша ТОБЫ > 1

Яғни, бұл жағдайда жолдар алдымен сүзіледі: жалпы құны 80 000-нан асатын өнімдер таңдалады. Содан кейін таңдалған өнімдер өндіруші бойынша топтастырылады. Содан кейін топтардың өздері сүзіледі - 1-ден көп үлгіні қамтитын топтар таңдалады.

Егер сұрыптау қажет болса, ORDER BY өрнегі HAVING өрнегінен кейін келеді:

Өндірушіні ТАҢДАҢЫЗ, COUNT(*) Үлгілер ретінде, ҚОЙЫНДЫ(ӨнімСаны) ҚАЙДА ЖЕТКЕН өнімдерден бірліктер ретінде Бағасы * ӨнімСаны > 80000 СОМА БАР ӨНІРУШІ БОЙЫНША ТОП(ӨнімСаны) > 2 БІРЛІК БОЙЫНША ТАПСЫРЫС БЕРУ DESC

Бұл жағдайда топтау өндіруші бойынша жүргізіледі және әрбір өндірушіге арналған үлгілердің саны (Модельдер) және барлық осы үлгілер үшін барлық өнімдердің жалпы саны (Бірліктер) таңдалады. Соңында топтар өнім саны бойынша кему ретімен сұрыпталады.

Бұл оқулықта сіз SQL операторын пайдалануды үйренесіз ТОПТАУсинтаксиспен және мысалдармен.

Сипаттама

SQL GROUP BY сөйлемін бірнеше жазбалар бойынша деректерді жинау және нәтижелерді бір немесе бірнеше бағандарға топтау үшін SELECT мәлімдемесінде пайдалануға болады.

Синтаксис

SQL тіліндегі GROUP BY операторының синтаксисі:

Параметрлер немесе аргументтер

өрнек1 , өрнек2 , … ifadə_n Жиынтық функцияда инкапсуляцияланбаған және SQL сұрауының соңында GROUP BY ішіне қосылуы керек өрнектер. жиынтық_функция Бұл SUM, COUNT, MIN, MAX немесе AVG сияқты жиынтық функция. aggregate_expression Бұл жиынтық_функциясы пайдаланылатын баған немесе өрнек. кестелер Жазбаларды шығарып алғыңыз келетін кестелер. FROM сөйлемі кем дегенде бір кестені көрсетуі керек. WHERE шарттары Қосымша. Бұл жазбаларды таңдау үшін орындалуы керек шарттар. Өрнегі бойынша ТӘРТІП. Қосымша. Нәтиже жиынындағы жазбаларды сұрыптау үшін қолданылатын өрнек. Егер бірнеше өрнек көрсетілсе, мәндер үтірмен бөлінуі керек. ASC Қосымша. ASC нәтижелер жиынын өрнек бойынша өсу ретімен сұрыптайды. Модификатор көрсетілмесе, бұл әдепкі әрекет. DESC Қосымша. DESC нәтиже жиынын өрнек бойынша кему ретімен сұрыптайды.

Мысал - GROUP BY функциясын SUM функциясымен пайдалану

SQL тіліндегі SUM функциясымен GROUP BY функциясын қалай пайдалану керектігін көрейік.
Бұл мысалда бізде келесі деректері бар қызметкерлер кестесі бар:

департаменттің идентификаторы жалпы_жалақы
500 119500
501 113000

Бұл мысалда біз әрбір dept_id үшін барлық жалақыны қосу үшін SUM функциясын қолдандық және SUM(жалақы) нәтижесіне "жалпы_жалақы" бүркеншік атын бердік. Dept_id SUM функциясында инкапсуляцияланбағандықтан, ол GROUP BY тармағында көрсетілуі керек.

Мысал - GROUP BY функциясын COUNT функциясымен пайдалану

SQL тіліндегі COUNT функциясымен GROUP BY сөйлемін қалай пайдалану керектігін көрейік.

Бұл мысалда бізде келесі деректері бар өнімдер кестесі бар:

Бұл мысалда біз әрбір санат_идентификаторы үшін жалпы_өнімдердің санын есептеу үшін COUNT функциясын қолдандық және COUNT функциясының нәтижелері ретінде "жалпы_өнім" бүркеншік атын көрсеттік. Біз NULL болып табылатын барлық санат_идентификатор мәндерін WHERE сөйлемінде сүзу арқылы алып тастадық. Санат_идентификаторы COUNT функциясында инкапсуляцияланбағандықтан, ол GROUP BY тармағында көрсетілуі керек.

Мысал - GROUP BY функциясын MIN функциясымен пайдалану

Енді SQL тіліндегі MIN функциясымен GROUP BY сөйлемін қалай пайдалану керектігін көрейік.

Бұл мысалда біз келесі деректермен қызметкерлер кестесін қайтадан қолданамыз:

2 жазба таңдалады. Міне, сіз алатын нәтижелер:

департаменттің идентификаторы ең төменгі_жалақы
500 57500
501 42000

Бұл мысалда біз әрбір dept_id үшін ең төменгі жалақы мәнін қайтару үшін MIN функциясын қолдандық және MIN функциясының нәтижелеріне "ең төмен_жалақы" бүркеншік ат қойдық. Dept_id MIN функциясында инкапсуляцияланбағандықтан, ол GROUP BY тармағында көрсетілуі керек.

Мысал - GROUP BY функциясын MAX функциясымен пайдалану

Соңында GROUP BY сөйлемін MAX функциясымен қалай пайдалану керектігін қарастырайық.

Қызметкерлер кестесін қайтадан қолданайық, бірақ бұл жолы әрбір dept_id үшін ең жоғары жалақыны табыңыз:

қызметкер_нөмірі аты тек жалақы департаменттің идентификаторы
1001 Джастин Бибер 62000 500
1002 Селена Гомес 57500 500
1003 Мила Кунис 71000 501
1004 Том Круиз 42000 501

Келесі SQL мәлімдемесін енгізіңіз.



Бөлісу