SQL აგრეგატის ფუნქციები. SQL აგრეგატული ფუნქციები - SUM, MIN, MAX, AVG, COUNT

დისციპლინის სვეტის მნიშვნელობით. მივიღებთ 4 ჯგუფს, რომლებისთვისაც შეგვიძლია გამოვთვალოთ ზოგიერთი ჯგუფის მნიშვნელობები, როგორიცაა ჯგუფში ტოპების რაოდენობა, Score სვეტის მაქსიმალური ან მინიმალური მნიშვნელობა. ცხრილი 5.7. აგრეგატული ფუნქციები
ფუნქცია შედეგი
COUNT სტრიქონების რაოდენობა ან ველის არა ცარიელი მნიშვნელობები, რომლებიც არჩეულია მოთხოვნამ
ჯამი ამ ველის ყველა არჩეული მნიშვნელობის ჯამი
AVG ამ ველის ყველა არჩეული მნიშვნელობის საშუალო არითმეტიკული
მინ ამ ველის ყველა შერჩეული მნიშვნელობიდან ყველაზე პატარა
მაქს ამ ველის ყველა შერჩეული მნიშვნელობიდან ყველაზე დიდი
R1
Სრული სახელი დისციპლინა შეფასება
ჯგუფი 1 პეტროვი F.I. Მონაცემთა ბაზა 5
სიდოროვი K.A. Მონაცემთა ბაზა 4
მირონოვი A.V. Მონაცემთა ბაზა 2
სტეპანოვა K.E. Მონაცემთა ბაზა 2
კრილოვა T.S. Მონაცემთა ბაზა 5
ვლადიმროვი V.A. Მონაცემთა ბაზა 5
ჯგუფი 2 სიდოროვი K.A. ინფორმაციის თეორია 4
სტეპანოვა K.E. ინფორმაციის თეორია 2
კრილოვა T.S. ინფორმაციის თეორია 5
მირონოვი A.V. ინფორმაციის თეორია ნულოვანი
ჯგუფი 3 ტროფიმოვი P.A. ქსელები და ტელეკომუნიკაციები 4
ივანოვა E.A. ქსელები და ტელეკომუნიკაციები 5
უტკინა ნ.ვ. ქსელები და ტელეკომუნიკაციები 5
ჯგუფი 4 ვლადიმროვი V.A. ინგლისური ენა 4
ტროფიმოვი P.A. ინგლისური ენა 5
ივანოვა E.A. ინგლისური ენა 3
პეტროვი F.I. ინგლისური ენა 5

აგრეგატული ფუნქციებიგამოიყენება ველების სახელების მსგავსად SELECT განცხადებაში, მაგრამ ერთი გამონაკლისით: ისინი იღებენ ველის სახელს არგუმენტად. მხოლოდ რიცხვითი ველების გამოყენება შესაძლებელია SUM და AVG ფუნქციებით. როგორც რიცხვითი, ასევე სიმბოლოების ველი შეიძლება გამოყენებულ იქნას COUNT, MAX და MIN ფუნქციებით. სიმბოლოების ველებთან გამოყენებისას, MAX და MIN გადათარგმნის მათ ექვივალენტურ ASCII კოდს და დაამუშავებს ანბანის მიხედვით. ზოგიერთი DBMS იძლევა წყობილი აგრეგატების გამოყენებას, მაგრამ ეს არის გადახრა ANSI სტანდარტიდან ყველა შემდგომი შედეგით.

მაგალითად, შეგიძლიათ გამოთვალოთ სტუდენტების რაოდენობა, რომლებმაც გამოცდები ჩააბარეს თითოეულ დისციპლინაში. ამისათვის თქვენ უნდა შეასრულოთ მოთხოვნა დაჯგუფებული "დისციპლინის" ველში და შედეგად აჩვენოთ დისციპლინის სახელი და ამ დისციპლინის ჯგუფში რიგების რაოდენობა. * სიმბოლოს არგუმენტად გამოყენება COUNT ფუნქციისთვის ნიშნავს ჯგუფში ყველა მწკრივის დათვლას.

SELECT R1.Discipline, COUNT(*) FROM R1 GROUP BY R1.Discipline

შედეგი:

თუ გვსურს დავთვალოთ იმ ადამიანების რაოდენობა, ვინც ჩააბარა გამოცდა რომელიმე დისციპლინაში, მაშინ დაჯგუფებამდე უნდა გამოვრიცხოთ გაურკვეველი მნიშვნელობები თავდაპირველი თანაფარდობიდან. ამ შემთხვევაში მოთხოვნა ასე გამოიყურება:

ჩვენ ვიღებთ შედეგს:

ამ შემთხვევაში, ხაზი სტუდენტთან

მირონოვი A.V. ინფორმაციის თეორია ნულოვანი

დაჯგუფებამდე არ მოხვდება ტოპების ნაკრებში, ამიტომ ჯგუფში ტოპების რაოდენობა დისციპლინისთვის " ინფორმაციის თეორია 1-ით ნაკლები იქნება.

გამოყენება შესაძლებელია აგრეგატული ფუნქციებიასევე წინასწარ დაჯგუფების ოპერაციის გარეშე, ამ შემთხვევაში მთელი მიმართება განიხილება როგორც ერთ ჯგუფად და ამ ჯგუფისთვის შეიძლება გამოითვალოს ერთი მნიშვნელობა თითო ჯგუფზე.

კვლავ მივუბრუნდეთ „სესიის“ მონაცემთა ბაზას (ცხრილები R1, R2, R3), ვხვდებით წარმატებით ჩაბარებული გამოცდების რაოდენობას:

ეს, რა თქმა უნდა, განსხვავდება ველის არჩევისგან, რადგან ერთი მნიშვნელობა ყოველთვის ბრუნდება, მიუხედავად იმისა, თუ რამდენი მწკრივია ცხრილში. არგუმენტი აგრეგატული ფუნქციებიშეიძლება არსებობდეს ცხრილის ცალკეული სვეტები. მაგრამ იმისათვის, რომ გამოვთვალოთ, მაგალითად, ჯგუფში გარკვეული სვეტის განსხვავებული მნიშვნელობების რაოდენობა, თქვენ უნდა გამოიყენოთ DISTINCT საკვანძო სიტყვა სვეტის სახელთან ერთად. გამოვთვალოთ თითოეულ დისციპლინაში მიღებული სხვადასხვა ქულების რაოდენობა:

შედეგი:

შედეგი შეიძლება შეიცავდეს დაჯგუფების ველის მნიშვნელობას და რამდენიმეს აგრეგატული ფუნქციებიდა დაჯგუფების პირობებში შეგიძლიათ გამოიყენოთ მრავალი ველი. ამ შემთხვევაში ჯგუფები იქმნება მითითებული დაჯგუფების ველების მიხედვით. აგრეგატული ფუნქციის ოპერაციები შეიძლება გამოყენებულ იქნას მრავალი წყაროს ცხრილის შესაერთებლად. მაგალითად, დავსვათ კითხვა: განვსაზღვროთ თითოეული ჯგუფისთვის და თითოეული დისციპლინისთვის იმ სტუდენტების რაოდენობა, რომლებმაც წარმატებით ჩააბარეს გამოცდა და საშუალო ქულა დისციპლინაში.

შედეგი:

ვერ ვიყენებთ აგრეგატული ფუნქციები WHERE პუნქტში, რადგან პრედიკატები ფასდება ერთი ხაზის მიხედვით და აგრეგატული ფუნქციები- ხაზების ჯგუფების თვალსაზრისით.

GROUP BY პუნქტი საშუალებას გაძლევთ განსაზღვროთ მნიშვნელობების ქვესიმრავლე კონკრეტულ ველში სხვა ველის თვალსაზრისით და გამოიყენოთ აგრეგატული ფუნქცია ქვეჯგუფზე. ეს შესაძლებელს ხდის ველების გაერთიანებას და აგრეგატული ფუნქციებიერთ SELECT პუნქტში. აგრეგატული ფუნქციებიშეიძლება გამოყენებულ იქნას როგორც SELECT ხაზის შედეგების გამოსატანად, ასევე წარმოქმნილი HAVING ჯგუფების დამუშავების მდგომარეობის გამოსახულებაში. ამ შემთხვევაში, თითოეული აგრეგატული ფუნქცია გამოითვლება თითოეული შერჩეული ჯგუფისთვის. გაანგარიშებით მიღებული მნიშვნელობები აგრეგატული ფუნქციები, შეიძლება გამოყენებულ იქნას შესაბამისი შედეგების საჩვენებლად ან ჯგუფების შერჩევის პირობით.

მოდით ავაშენოთ მოთხოვნა, რომელიც აჩვენებს ჯგუფებს, რომლებშიც ერთ დისციპლინაში ერთზე მეტი ცუდი ნიშანი იქნა მიღებული გამოცდებში:

მომავალში, მაგალითად, ჩვენ ვიმუშავებთ არა "Session" მონაცემთა ბაზასთან, არამედ "Bank" მონაცემთა ბაზასთან, რომელიც შედგება ერთი ცხრილისგან F, რომელიც ინახავს F ურთიერთობას, რომელიც შეიცავს ინფორმაციას გარკვეული ბანკის ფილიალებში ანგარიშების შესახებ:

F = (N, სრული სახელი, ფილიალი, გახსნის თარიღი, დახურვის თარიღი, ბალანსი); Q = (ფილიალი, ქალაქი);

ვინაიდან ამის საფუძველზე შესაძლებელია სამუშაოს უფრო ნათლად ილუსტრაცია აგრეგატული ფუნქციებითა და დაჯგუფებით.

მაგალითად, დავუშვათ, რომ გვინდა ვიპოვოთ საბანკო ანგარიშების მთლიანი ნაშთი. თქვენ შეგიძლიათ გააკეთოთ ცალკე მოთხოვნა თითოეული მათგანისთვის, თითოეული ფილიალის ცხრილიდან SUM (ბალანსის) არჩევით. თუმცა, GROUP BY საშუალებას მოგცემთ დააყენოთ ისინი ყველა ერთ ბრძანებაში:

SELECT ფილიალი, SUM(Remaining) FROM F GROUP BY Branch;

GROUP BY მოქმედებს აგრეგატული ფუნქციებიდამოუკიდებლად თითოეული ჯგუფისთვის განსაზღვრული Branch ველის მნიშვნელობის გამოყენებით. ჯგუფი შედგება რიგებისაგან, რომელთაც აქვთ იგივე Branch ველის მნიშვნელობა და

შეუძლია განახორციელოს ველის მნიშვნელობების განზოგადებული ჯგუფური დამუშავება. ეს კეთდება საერთო ფუნქციების გამოყენებით. აგრეგატული ფუნქციები აწარმოებენ ერთ მნიშვნელობას მთელი ცხრილის ჯგუფისთვის. SQL უზრუნველყოფს შემდეგ საერთო ფუნქციებს:

  • COUNT- ითვლის ცხრილის სტრიქონების რაოდენობას არგუმენტად მითითებული ველის არა NULL მნიშვნელობებით.
  • ჯამი- ითვლის ყველა არჩეული მნიშვნელობის არითმეტიკულ ჯამს მოცემულ ველზე.
  • AVG- აფასებს ამ ველის ყველა შერჩეულ მნიშვნელობას.
  • მაქს- აჩვენებს ამ ველის ყველა არჩეული მნიშვნელობის უდიდეს მნიშვნელობას.
  • მინ- აჩვენებს ამ ველის ყველა არჩეული მნიშვნელობის უმცირეს მნიშვნელობას.

    აგრეგატული ფუნქციების გამოყენება

    აგრეგატული ფუნქციები გამოიყენება ველების სახელების მსგავსად მოთხოვნის SELECT პუნქტში, ერთი გამონაკლისის გარდა: ისინი არგუმენტად იღებენ ველების სახელებს. მხოლოდ რიცხვითი ველების გამოყენება შესაძლებელია ჯამიდა AVG. თან COUNT, მაქს, და მინშეიძლება გამოყენებულ იქნას როგორც რიცხვითი, ასევე სიმბოლოების ველი. სიმბოლოების ველებთან გამოყენებისას მაქსდა მინგადათარგმნის მათ ASCII ეკვივალენტად. Ეს ნიშნავს, რომ მინაირჩევს პირველს და მაქსბოლო მნიშვნელობა ანბანური თანმიმდევრობით.

    გაყიდვების ცხრილში მთლიანი გაყიდვების ოდენობის საპოვნელად უნდა დავწეროთ შემდეგი მოთხოვნა:

    SELECT SUM(SSum) FROM ყიდის

    შედეგად ვიღებთ:

    ამ მოთხოვნამ დაითვალა არანულო მნიშვნელობების რაოდენობა გაყიდვების ცხრილის SNum ველში. თუ ჩვენ გადავწერთ შეკითხვას შემდეგნაირად:

    SELECT COUNT(SDate) FROM გაყიდვები

    შედეგად ვიღებთ:

    COUNT OF SD თარიღი
    4

    შეკითხვის სხვადასხვა შედეგი, როდესაც გამოითვლება ის, რაც ერთი და იგივეა, მიიღება, რადგან SDate ველის ერთ-ერთი მნიშვნელობა ცარიელია ( NULL). ფრთხილად იყავით ასეთი მოთხოვნების გამოყენებისას.

ვისწავლოთ შეჯამება. არა, ეს არ არის SQL-ის შესწავლის შედეგები, არამედ მონაცემთა ბაზის ცხრილების სვეტების მნიშვნელობების შედეგები. SQL აგრეგატის ფუნქციები მუშაობს სვეტის მნიშვნელობებზე, რათა წარმოქმნას ერთი შედეგი. ყველაზე ხშირად გამოყენებული SQL აგრეგატის ფუნქციებია SUM, MIN, MAX, AVG და COUNT. აუცილებელია განასხვავოთ აგრეგატული ფუნქციების გამოყენების ორი შემთხვევა. პირველ რიგში, აგრეგატული ფუნქციები გამოიყენება დამოუკიდებლად და აბრუნებს ერთ მიღებულ მნიშვნელობას. მეორეც, აგრეგატული ფუნქციები გამოიყენება SQL GROUP BY პუნქტით, ანუ დაჯგუფება ველების (სვეტების) მიხედვით თითოეულ ჯგუფში მიღებული მნიშვნელობების მისაღებად. ჯერ განვიხილოთ აგრეგატული ფუნქციების გამოყენების შემთხვევები დაჯგუფების გარეშე.

SQL SUM ფუნქცია

SQL SUM ფუნქცია აბრუნებს მნიშვნელობების ჯამს მონაცემთა ბაზის ცხრილის სვეტში. მისი გამოყენება შესაძლებელია მხოლოდ იმ სვეტებზე, რომელთა მნიშვნელობებიც რიცხვებია. SQL მოთხოვნები მიღებული თანხის მისაღებად იწყება ასე:

აირჩიეთ თანხა (COLUMN_NAME) ...

ამ გამოთქმას მოჰყვება FROM (TABLE_NAME) და შემდეგ შეიძლება განისაზღვროს პირობა WHERE პუნქტის გამოყენებით. გარდა ამისა, სვეტის სახელს შეიძლება წინ უსწრებდეს DISTINCT, რაც ნიშნავს, რომ დაითვლება მხოლოდ უნიკალური მნიშვნელობები. ნაგულისხმევად, გათვალისწინებულია ყველა მნიშვნელობა (ამისთვის შეგიძლიათ კონკრეტულად მიუთითოთ არა DISTINCT, არამედ ALL, მაგრამ სიტყვა ALL არ არის საჭირო).

მაგალითი 1.არსებობს კომპანიის მონაცემთა ბაზა მისი განყოფილებებისა და თანამშრომლების შესახებ მონაცემებით. პერსონალის ცხრილს ასევე აქვს სვეტი თანამშრომლების ხელფასების მონაცემებით. ცხრილიდან არჩევანი ასე გამოიყურება (სურათის გასადიდებლად დააწკაპუნეთ მასზე მაუსის მარცხენა ღილაკით):

ყველა ხელფასის ჯამის მისაღებად გამოიყენეთ შემდეგი შეკითხვა:

აირჩიეთ თანხა (ხელფასი) პერსონალისგან

ეს მოთხოვნა დააბრუნებს მნიშვნელობას 287664.63.

Და ახლა . სავარჯიშოებში ჩვენ უკვე ვიწყებთ ამოცანების გართულებას, ვაახლოებთ მათ პრაქტიკაში ნაცნობებთან.

SQL MIN ფუნქცია

SQL MIN ფუნქცია ასევე მუშაობს სვეტებზე, რომელთა მნიშვნელობებიც არის რიცხვები და აბრუნებს სვეტში არსებული ყველა მნიშვნელობის მინიმუმს. ამ ფუნქციას აქვს SUM ფუნქციის მსგავსი სინტაქსი.

მაგალითი 3.მონაცემთა ბაზა და ცხრილი იგივეა, რაც მაგალითში 1.

ჩვენ უნდა გავარკვიოთ 42 განყოფილების თანამშრომლების მინიმალური ხელფასი. ამისათვის დაწერეთ შემდეგი მოთხოვნა:

მოთხოვნა დააბრუნებს მნიშვნელობას 10505.90.

Და ისევ ვარჯიში თვითგამორკვევისთვის. ამ და სხვა სავარჯიშოებში დაგჭირდებათ არა მხოლოდ პერსონალის ცხრილი, არამედ Org ცხრილი, რომელიც შეიცავს მონაცემებს კომპანიის განყოფილებების შესახებ:


მაგალითი 4. Org ცხრილი ემატება Staff ცხრილს, რომელიც შეიცავს მონაცემებს კომპანიის განყოფილებების შესახებ. დაბეჭდეთ ბოსტონში მდებარე განყოფილებაში ერთი თანამშრომლის მიერ მუშაობის მინიმალური წლები.

SQL MAX ფუნქცია

SQL MAX ფუნქცია მუშაობს ანალოგიურად და აქვს მსგავსი სინტაქსი, რომელიც გამოიყენება, როდესაც გჭირდებათ მაქსიმალური მნიშვნელობის დადგენა სვეტის ყველა მნიშვნელობას შორის.

მაგალითი 5.

თქვენ უნდა გაარკვიოთ 42 განყოფილების თანამშრომლების მაქსიმალური ხელფასი. ამისათვის დაწერეთ შემდეგი მოთხოვნა:

მოთხოვნა დააბრუნებს მნიშვნელობას 18352.80

Დროა სავარჯიშოები დამოუკიდებელი გადაწყვეტისთვის.

მაგალითი 6.ჩვენ კვლავ ვმუშაობთ ორ მაგიდასთან - Staff და Org. აჩვენეთ დეპარტამენტის დასახელება და კომისიის მაქსიმალური ღირებულება, რომელიც მიიღო ერთი თანამშრომლის მიერ დეპარტამენტების ჯგუფში (განყოფილება) აღმოსავლური. გამოყენება JOIN (მაგიდების შეერთება) .

SQL AVG ფუნქცია

რაც მითითებულია წინა აღწერილი ფუნქციების სინტაქსის შესახებ, ასევე მართალია SQL AVG ფუნქციისთვის. ეს ფუნქცია აბრუნებს ყველა მნიშვნელობის საშუალოს სვეტში.

მაგალითი 7.მონაცემთა ბაზა და ცხრილი იგივეა, რაც წინა მაგალითებში.

დავუშვათ, რომ გსურთ გაიგოთ 42-ე განყოფილების თანამშრომელთა მომსახურების საშუალო ხანგრძლივობა. ამისათვის დაწერეთ შემდეგი შეკითხვა:

შედეგი იქნება 6.33

მაგალითი 8.ვმუშაობთ ერთი მაგიდით - პერსონალი. აჩვენეთ 4-დან 6 წლამდე გამოცდილების მქონე თანამშრომლების საშუალო ხელფასი.

SQL COUNT ფუნქცია

SQL COUNT ფუნქცია აბრუნებს ჩანაწერების რაოდენობას მონაცემთა ბაზის ცხრილში. თუ თქვენ მიუთითებთ SELECT COUNT(COLUMN_NAME) ... მოთხოვნაში, შედეგი იქნება ჩანაწერების რაოდენობა იმ ჩანაწერების გათვალისწინების გარეშე, რომლებშიც სვეტის მნიშვნელობა არის NULL (განუსაზღვრელი). თუ არგუმენტად იყენებთ ვარსკვლავს და დაიწყებთ SELECT COUNT(*) ... მოთხოვნას, შედეგი იქნება ცხრილის ყველა ჩანაწერის (მწკრივის) რაოდენობა.

მაგალითი 9.მონაცემთა ბაზა და ცხრილი იგივეა, რაც წინა მაგალითებში.

გსურთ იცოდეთ ყველა თანამშრომლის რაოდენობა, რომლებიც იღებენ საკომისიოს. თანამშრომლების რაოდენობა, რომელთა Comm სვეტის მნიშვნელობები არ არის NULL, დაბრუნდება შემდეგი მოთხოვნით:

SELECT COUNT(Comm) FROM პერსონალიდან

შედეგი იქნება 11.

მაგალითი 10.მონაცემთა ბაზა და ცხრილი იგივეა, რაც წინა მაგალითებში.

თუ გსურთ გაიგოთ ცხრილში ჩანაწერების მთლიანი რაოდენობა, გამოიყენეთ შეკითხვა ვარსკვლავით, როგორც არგუმენტი COUNT ფუნქციისთვის:

აირჩიეთ COUNT(*) პერსონალისგან

შედეგი იქნება 17.

Შემდეგში ვარჯიში დამოუკიდებელი გადაწყვეტისთვისთქვენ დაგჭირდებათ ქვემოთხოვნის გამოყენება.

მაგალითი 11.ვმუშაობთ ერთი მაგიდით - პერსონალი. დაგეგმვის განყოფილებაში (Plains) თანამშრომელთა რაოდენობის ჩვენება.

აგრეგატული ფუნქციები SQL GROUP BY-ით

ახლა მოდით შევხედოთ აგრეგატის ფუნქციების გამოყენებას SQL GROUP BY განცხადებასთან ერთად. SQL GROUP BY განცხადება გამოიყენება მონაცემთა ბაზის ცხრილის სვეტების მიხედვით შედეგების მნიშვნელობების დასაჯგუფებლად.

მაგალითი 12.არსებობს სარეკლამო პორტალის მონაცემთა ბაზა. მას აქვს რეკლამების ცხრილი, რომელიც შეიცავს მონაცემებს კვირისთვის გაგზავნილი რეკლამების შესახებ. კატეგორიის სვეტი შეიცავს მონაცემებს მსხვილი რეკლამის კატეგორიების შესახებ (მაგალითად, უძრავი ქონება), ხოლო ნაწილების სვეტი შეიცავს მონაცემებს კატეგორიებში შემავალი მცირე ნაწილების შესახებ (მაგალითად, ბინების და საზაფხულო სახლების ნაწილები უძრავი ქონების კატეგორიის ნაწილებია). გრაფაში Units შეიცავს მონაცემებს წარმოდგენილი განცხადებების რაოდენობის შესახებ, ხოლო სვეტი Money შეიცავს მონაცემებს რეკლამის გაგზავნისთვის მიღებული თანხის ოდენობის შესახებ.

კატეგორიანაწილიერთეულებიფული
ტრანსპორტიმანქანები110 17600
Უძრავი ქონებაბინები89 18690
Უძრავი ქონებადაჩის57 11970
ტრანსპორტიმოტოციკლები131 20960
Სამშენებლო მასალებიდაფები68 7140
Ელექტრო ტექნიკატელევიზორები127 8255
Ელექტრო ტექნიკამაცივრები137 8905
Სამშენებლო მასალებირეგიპები112 11760
დასვენებაწიგნები96 6240
Უძრავი ქონებაᲡახლში47 9870
დასვენებამუსიკა117 7605
დასვენებათამაშები41 2665

SQL GROUP BY განცხადების გამოყენებით, იპოვნეთ მიღებული თანხის ოდენობა თითოეულ კატეგორიაში განცხადებების განთავსებით. ჩვენ ვწერთ შემდეგ მოთხოვნას.

გამარჯობა! დღეს ჩვენ გავეცნობით SQL-ში აგრეგატულ ფუნქციებს, დეტალურად გავაანალიზებთ, თუ როგორ მუშაობენ ისინი წინა გაკვეთილებში ჩვენ მიერ შექმნილი ცხრილების მონაცემებთან.

ზოგადი კონცეფცია

ბოლო გაკვეთილზე ვისწავლეთ როგორ შევქმნათ მოთხოვნები მონაცემებზე. აგრეგატული ფუნქციები არსებობს იმისათვის, რომ შევძლოთ მიღებული მონაცემების როგორმე განზოგადება, ანუ მათი მანიპულირება ისე, როგორც ჩვენ გვინდა.

ეს ფუნქციები შესრულებულია საკვანძო სიტყვების გამოყენებით, რომლებიც შედის SELECT მოთხოვნაში და როგორ არის ისინი დაწერილი, განხილული იქნება ქვემოთ. გასაგებად რომ ვთქვათ, აქ არის SQL-ში აგრეგატული ფუნქციების რამდენიმე შესაძლებლობა:

  • არჩეული მნიშვნელობების ჯამი
  • იპოვეთ მნიშვნელობათა საშუალო არითმეტიკული
  • იპოვნეთ მინიმალური და მაქსიმალური მნიშვნელობები

SQL აგრეგატის ფუნქციის მაგალითები

ჩვენ განვიხილავთ ყველაზე ხშირად გამოყენებულ ფუნქციებს და მოვიყვანთ რამდენიმე მაგალითს.

SUM ფუნქცია

ეს ფუნქცია საშუალებას გაძლევთ შეაჯამოთ ნებისმიერი ველის მნიშვნელობები SELECT მოთხოვნის დროს. საკმაოდ სასარგებლო ფუნქცია, რომლის სინტაქსი საკმაოდ მარტივია, ისევე როგორც ყველა სხვა აგრეგატული ფუნქცია SQL-ში. გასაგებად, დავიწყოთ მაგალითით:

მიიღეთ ყველა შეკვეთის ჯამი შეკვეთების ცხრილიდან, რომლებიც გაკეთდა 2016 წელს.

შეკვეთების ოდენობის უბრალოდ ჩვენება შესაძლებელი იქნებოდა, მაგრამ მეჩვენება, რომ ეს საკმაოდ მარტივია. გავიხსენოთ ჩვენი ცხრილის სტრუქტურა:

ონუმამტთარიღირაოდენობასნუმ
1001 128 2016-01-01 9 4
1002 1800 2016-04-10 10 7
1003 348 2017-04-08 2 1
1004 500 2016-06-07 3 3
1005 499 2017-12-04 5 4
1006 320 2016-03-03 5 4
1007 80 2017-09-02 7 1
1008 780 2016-03-07 1 3
1009 560 2017-10-07 3 7
1010 900 2016-01-08 6 8

შემდეგი კოდი შეასრულებს საჭირო შერჩევას:

SELECT SUM (amt) FROM Orders WHERE date BETWEEN "2016-01-01" და "2016-12-31" ;

შედეგად ვიღებთ:

ჯამი (ამტ)
4428

ამ შეკითხვაში ჩვენ გამოვიყენეთ SUM ფუნქცია, რის შემდეგაც ფრჩხილებში უნდა მიუთითოთ შეჯამების ველი. შემდეგ ჩვენ დავაზუსტეთ მდგომარეობა WHERE-ში, რომელიც არჩევდა მწკრივებს მხოლოდ 2016 წლიდან. სინამდვილეში, ეს პირობა შეიძლება სხვაგვარად დაიწეროს, მაგრამ ახლა SQL-ში აგრეგატული ჯამის ფუნქცია უფრო მნიშვნელოვანია.

AVG ფუნქცია

შემდეგი ფუნქცია ითვლის მონაცემთა ველის საშუალო არითმეტიკულ მნიშვნელობას, რომელსაც პარამეტრად ვაზუსტებთ. ასეთი ფუნქციის სინტაქსი იდენტურია შემაჯამებელი ფუნქციისა. მოდით გადავიდეთ უმარტივეს ამოცანაზე:

აჩვენეთ შეკვეთის საშუალო მნიშვნელობა შეკვეთების ცხრილიდან.

და მაშინვე მოთხოვნა:

SELECT AVG (amt) FROM Orders;

შედეგად ვიღებთ:

ასევე აღსანიშნავია, რომ წინა ფუნქციებისგან განსხვავებით, ამ 2-ს შეუძლია იმუშაოს სიმბოლოების პარამეტრებთან, ანუ შეგიძლიათ დაწეროთ შეკითხვა, როგორიცაა MIN (თარიღი)(ამ შემთხვევაში თარიღი სიმბოლურია), შემდეგ კი 2016-01-01 დაგვიბრუნდება.

ფაქტია, რომ ამ ფუნქციებს აქვთ სიმბოლოების ASCII კოდში გადაქცევის მექანიზმი, რომელსაც შემდეგ ადარებენ.

კიდევ ერთი მნიშვნელოვანი წერტილი არის ის, რომ ჩვენ შეგვიძლია გავაკეთოთ მარტივი მათემატიკა SELECT შეკითხვაში, როგორიცაა:

SELECT (MAX (ამტ) - MIN (მტ)) AS "განსხვავება" შეკვეთებიდან;

ის დააბრუნებს შემდეგ პასუხს:

ცხადია, შეკვეთების რაოდენობა არის 10, მაგრამ თუ მოულოდნელად დიდი მაგიდა გაქვთ, მაშინ ეს ფუნქცია ძალიან მოსახერხებელი იქნება. უნიკალური გამყიდველებისთვის DISTINCT უნდა იყოს გამოყენებული, რადგან ერთ გამყიდველს შეუძლია მრავალი შეკვეთის მომსახურება.

GROUP BY ოპერატორი

ახლა მოდით შევხედოთ 2 მნიშვნელოვან ოპერატორს, რომლებიც გვეხმარება SQL-ში ჩვენი მოთხოვნების ფუნქციონირების გაფართოებაში. პირველი მათგანი არის GROUP BY ოპერატორი, რომელიც ახორციელებს დაჯგუფებას ზოგიერთი ველის მიხედვით, რაც ზოგჯერ აუცილებელია. და ამ ჯგუფისთვის ის ასრულებს მითითებულ მოქმედებას. Მაგალითად:

აჩვენეთ ყველა შეკვეთის ჯამი თითოეული გამყიდველისთვის ცალკე.

ანუ, ახლა ჩვენ უნდა შევარჩიოთ ველები შეკვეთის ფასით თითოეული გამყიდველისთვის Orders ცხრილში და შევაჯამოთ ისინი. GROUP BY განცხადება SQL-ში ამ ყველაფერს საკმაოდ მარტივად გააკეთებს:

SELECT snum, SUM (amt) AS "ყველა შეკვეთის ჯამი" FROM Orders GROUP BY snum;

და ბოლოს მივიღებთ:

სნუმყველა შეკვეთის ჯამი
1 428
3 1280
4 947
7 2360
8 900

როგორც ხედავთ, SQL-მა გამოყო ჯგუფი თითოეული გამყიდველისთვის და გამოითვალა მათი ყველა შეკვეთის ჯამი.

HAVING ოპერატორი

ეს ოპერატორი გამოიყენება როგორც წინა ოპერატორის დამატება. აუცილებელია დაჯგუფების დროს მონაცემთა შერჩევის პირობების დაყენების მიზნით. თუ პირობა დაკმაყოფილებულია, მაშინ ჯგუფი გამოყოფილია, თუ არა, მაშინ არაფერი მოხდება. განიხილეთ შემდეგი კოდი:

SELECT snum, SUM (amt) AS "ყველა შეკვეთის ჯამი"შეკვეთებიდან GROUP BY snum HAVING MAX (მტ) > 1000;

რომელიც შექმნის ჯგუფს გამყიდველს და გამოთვლის ამ ჯგუფის შეკვეთების რაოდენობას, მხოლოდ იმ შემთხვევაში, თუ შეკვეთის მაქსიმალური ოდენობა 1000-ზე მეტია. ცხადია, ასეთი გამყიდველი მხოლოდ ერთია, მას გამოიყოფა ჯგუფი და ყველა ჯამი. შეკვეთები გამოითვლება:

სნუმყველა შეკვეთის ჯამი
7 2360

როგორც ჩანს, რატომ არ გამოვიყენოთ WHERE პირობა აქ, მაგრამ SQL არის აგებული ისე, რომ ამ შემთხვევაში ის წარმოქმნის შეცდომას და ამიტომ SQL-ს აქვს HAVING ოპერატორი.

SQL-ში აგრეგატული ფუნქციების მაგალითები

1. დაწერეთ მოთხოვნა, რომელიც გამოთვლის 2016 წლის 1 იანვარს დასრულებული შეკვეთების ყველა ოდენობას.

SELECT SUM (amt) FROM Orders WHERE odate = "2016-01-01" ;

2. დაწერეთ მოთხოვნა, რომელიც დათვლის მკაფიო არა NULL მნიშვნელობების რაოდენობას ქალაქის ველისთვის კლიენტების ცხრილში.

აირჩიეთ COUNT (განსხვავებული ქალაქი) კლიენტებისგან;

3. დაწერეთ შეკითხვა, რომელიც შეარჩევს უმცირეს თანხას თითოეული მომხმარებლისთვის.

SELECT cnum, MIN (amt) FROM შეკვეთებიდან GROUP BY cnum;

4. დაწერეთ შეკითხვა, რომელიც შეარჩევს მომხმარებლებს, რომელთა სახელები იწყება ასო G-ით.

SELECT cname FROM კლიენტებისგან WHERE cname LIKE "Y%" ;

5. დაწერეთ შეკითხვა, რომელიც შეარჩევს ყველაზე მაღალ რეიტინგს თითოეულ ქალაქში.

აირჩიეთ ქალაქი, MAX (რეიტინგი) მომხმარებლებისგან ჯგუფი ქალაქების მიხედვით;

დასკვნა

სწორედ აქ დავამთავრებთ. ამ სტატიაში გავიგეთ SQL-ში აგრეგატული ფუნქციების შესახებ. ჩვენ განვიხილეთ ძირითადი ცნებები და ძირითადი მაგალითები, რომლებიც შეიძლება მოგვიანებით გამოდგეს.

თუ თქვენ გაქვთ რაიმე შეკითხვები, ჰკითხეთ მათ კომენტარებში.

გაკვეთილზე განხილული იქნება sql სვეტის (ველების) სახელის გადარქმევის თემა AS სერვისის სიტყვის გამოყენებით; ასევე გაშუქებულია sql-ში აგრეგატული ფუნქციების თემა. განხილული იქნება მოთხოვნების კონკრეტული მაგალითები

შეკითხვებში სვეტების სახელების გადარქმევა შესაძლებელია. ეს შედეგებს უფრო წასაკითხს ხდის.

SQL-ში ველების გადარქმევა გულისხმობს გამოყენებას AS საკვანძო სიტყვა, რომელიც გამოიყენება შედეგების ნაკრებებში ველების სახელების გადარქმევისთვის

Სინტაქსი:

აირჩიეთ<имя поля>ას<псевдоним>საიდან...

მოდით შევხედოთ SQL-ში სახელის გადარქმევის მაგალითს:

„ინსტიტუტის“ მონაცემთა ბაზის მაგალითი:აჩვენეთ მასწავლებლების სახელები და მათი ხელფასები, იმ მასწავლებლებისთვის, რომელთა ხელფასიც 15000-ზე ნაკლებია, გადაარქვით ზარპლატას ველს. "დაბალი ხელფასი"


✍ გამოსავალი:

SQL-ში სვეტების გადარქმევა ხშირად საჭიროა მრავალ ველთან დაკავშირებული მნიშვნელობების გაანგარიშებისასმაგიდები. მოდით შევხედოთ მაგალითს:

„ინსტიტუტის“ მონაცემთა ბაზის მაგალითი:მასწავლებელთა ცხრილიდან გამოიტანეთ სახელის ველი და გამოთვალეთ ხელფასის და პრემიის ოდენობა, ველის დასახელება "ხელფასი_ბონუსი"


✍ გამოსავალი:
1 2 SELECT name, (zarplata+ premia) AS zarplata_premia FROM მასწავლებელი;

SELECT name, (zarplata+premia) AS zarplata_premia FROM მასწავლებელი;

შედეგი:

აგრეგატული ფუნქციები SQL-ში

მთლიანი მნიშვნელობების მისაღებად და გამონათქვამების შესაფასებლად გამოიყენება sql-ში აგრეგატული ფუნქციები:

ყველა საერთო ფუნქცია აბრუნებს ერთ მნიშვნელობას.

COUNT, MIN და MAX ფუნქციები ვრცელდება მონაცემთა ნებისმიერ ტიპზე.

SUM და AVG ფუნქციები გამოიყენება მხოლოდ რიცხვითი ველებისთვის.
არსებობს განსხვავება COUNT(*) და COUNT() ფუნქციებს შორის: მეორე არ ითვალისწინებს NULL მნიშვნელობებს გაანგარიშებისას.

Მნიშვნელოვანი: SQL-ში აგრეგატულ ფუნქციებთან მუშაობისას გამოიყენება ფუნქციური სიტყვა ას


„ინსტიტუტის“ მონაცემთა ბაზის მაგალითი:მიიღეთ უმაღლესი ხელფასის ღირებულება მასწავლებლებს შორის, აჩვენეთ შედეგი როგორც "მაქს_ხელფასი"


✍ გამოსავალი:
SELECT MAX (zarplata) AS max_salary FROM მასწავლებლებისგან;

SELECT MAX(zarplata) AS max_salary FROM მასწავლებელი;

შედეგები:

მოდით შევხედოთ sql-ში აგრეგატის ფუნქციების გამოყენების უფრო რთულ მაგალითს.


✍ გამოსავალი:

GROUP BY პუნქტი SQL-ში

ჯგუფი ოპერატორის მიერ sql-ში ჩვეულებრივ გამოიყენება აგრეგატულ ფუნქციებთან ერთად.

აგრეგატული ფუნქციები შესრულებულია შეკითხვის ყველა მწკრივზე. თუ მოთხოვნა შეიცავს GROUP BY პუნქტს, სტრიქონების თითოეული ნაკრები, რომელიც მითითებულია GROUP BY პუნქტში, წარმოადგენს ჯგუფს და შესრულებულია აგრეგატული ფუნქციები. თითოეული ჯგუფისთვის ცალ-ცალკე.

მოდით შევხედოთ მაგალითს გაკვეთილების ცხრილით:

მაგალითი:

Მნიშვნელოვანი:ამრიგად, GROUP BY-ის გამოყენებით, ყველა შეკითხვის გამომავალი მწკრივი იყოფა ჯგუფებად, რომლებსაც ახასიათებთ მნიშვნელობების იგივე კომბინაციები ამ სვეტებში (ანუ აგრეგატული ფუნქციები შესრულებულია თითოეულ ჯგუფზე ცალკე).

გასათვალისწინებელია, რომ NULL მნიშვნელობების შემცველი ველის მიხედვით დაჯგუფებისას ყველა ასეთი ჩანაწერი ერთ ჯგუფში მოხვდება.

სხვადასხვა ტიპის პრინტერებისთვის, განსაზღვრეთ მათი საშუალო ღირებულება და რაოდენობა (ანუ ცალკე ლაზერისთვის, ჭავლური და მატრიცისთვის). გამოიყენეთ საერთო ფუნქციები. შედეგი ასე უნდა გამოიყურებოდეს:

აქვს SQL განცხადება

SQL-ში HAVING პუნქტი საჭიროა მნიშვნელობების შესამოწმებლად, რომლებიც მიიღება აგრეგატის ფუნქციის გამოყენებით დაჯგუფების შემდეგ(GROUP BY-ის გამოყენების შემდეგ). ასეთი შემოწმება არ შეიძლება შეიცავდეს WHERE პუნქტში.

მაგალითი: DB კომპიუტერული მაღაზია. გამოთვალეთ კომპიუტერების საშუალო ფასი იგივე პროცესორის სიჩქარით. განახორციელეთ გამოთვლები მხოლოდ იმ ჯგუფებისთვის, რომელთა საშუალო ფასი 30000-ზე ნაკლებია.



გაქვთ შეკითხვები?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: