Transcript
Page 1: SELECT :  שימוש בפונקציות צבירה

SELECT :שימוש בפונקציות צבירה

Using Aggregate Functions in SQL Queries

1

Page 2: SELECT :  שימוש בפונקציות צבירה

פונקציות צבירה מתמצתות נתונים מטבלה )בתמספר רב של רשומות( בטבלה )הרבה יותר קטנה( בת

אחד או כמה רשומות, כך שכל רשומה מייצגת חלק של הטבלה המקורית.

דוגמה: להציג ת.ז. וממוצע הציונים של כל סטודנטהטבלה הנדרשת הינה תמצית המידע מטבלת הסטודנטים כל רשומה בטבלת הנדרשת מייצגת את כל הציונים של

סטודנט מסוים

2

(Functions Aggregateמטרה של פונקציות צבירה )

Page 3: SELECT :  שימוש בפונקציות צבירה

בכלDBMS.קיימות הרבה פונקציות צבירה תמצאו פונקציות צבירה הקיימות ב-כאן ORACLE

:דוגמאות של פונקציות צבירהMAXהערך הגבוה ביותר = MIN הערך הנמוך ביותר = SUMסכום הערכים = AVGממוצע הערכים = COUNT)מספר הערכים )אפילו לא שונים =

נלמד להשתמש בפונקציות צבירה דרך דוגמאות

3

רשימה של פונקציות צבירה

Page 4: SELECT :  שימוש בפונקציות צבירה

כדי להתחיל, ניראה מההם הציונים של תלמיד

105:

SELECT grade FROM Grades WHERE

student_id=105;

:השאילתה הנדרשת היא

SELECT AVG(grade)

FROM Grades WHERE

student_id=105;

4

: לכתוב שאילתה המציגה את ממוצע הציונים 1דוגמה 105של תלמיד

Page 5: SELECT :  שימוש בפונקציות צבירה

:השאילתה הנדרשת היאSELECT AVG(grade) FROM Grades WHERE student_id=105;

5

: 1הבנה יותר עמוקה בדוגמה 105לכתוב שאילתה המציגה את ממוצע הציונים של תלמיד

. אחת לרשומה הטבלה את מתמצתת השאילתהצבירה פונקציית

לתמצת הוראה נותנת אחד לערך מסוים אטריבוט לתמצת איך אומרת

: הבאה שאילתה להריץ ננסהSELECT student_id, AVG(grade) FROM Grades WHERE student_id=105;

: השגיאה סטודנט DBMSסיבת מספר איזה יודעת לאלהציג

Page 6: SELECT :  שימוש בפונקציות צבירה

SELECT MIN(grade), MAX(grade) FROM Grades;

6

: לכתוב שאילתה המציגה את הציון המינימאלי 2דוגמה והמקסימאלי שהושגו

Page 7: SELECT :  שימוש בפונקציות צבירה

SELECT COUNT(student_id)FROM Grades;

בעצם אנחנו רוצים לספור רשומות. אפשר לעשות אתזה גם בדרך הבאה:

SELECT COUNT(*)FROM Grades;

7

: לכתוב שאילתה המציגה את מספר הציונים 3דוגמה שתלמידים קיבלו בקורסים

Page 8: SELECT :  שימוש בפונקציות צבירה

?האם הפתרון לשאלה הקודמת מתאימה

SELECT COUNT(student_id)FROM Grades;

!לא! כי אנחנו יכולים לספור אותו סטודנט כמה פעמים

SELECT COUNT(DISTINCT student_id)FROM Grades;

אותו דבר כמו השימוש ב-לאהערה חשובה: זה DISTINCT הידוע לנו:

SELECT DISTINCT COUNT(student_id)FROM Grades;

8

: לכתוב שאילתה המציגה את מספר 4דוגמה התלמידים שקיבלו ציונים בקורסים

Page 9: SELECT :  שימוש בפונקציות צבירה

'כדי להתחיל, ניראה ציוני סטודנטים ממוינים לפי מססטודנט:

9

: לכתוב שאילתה המציגה, עבור כל סטודנט, 5דוגמה את המספר שלו ביחד עם ממוצע הציונים

SELECT student_id, gradeFROM GradesORDER BY student_id

אנחנו צריכים לחשב ממוצע של •ציונים בכל קבוצה של רשומות עם

אותו מספר סטודנט

SELECT student_id, AVG(grade)

FROM GradesGROUP BY student_id;

Page 10: SELECT :  שימוש בפונקציות צבירה

SELECT AVG)A1(, MIN)A7(, A3, A4FROM T1, T2, T3WHERE תנאיםGROUP BY A2, A3, A4

10

SELECTמבנה בסיסי של

12

טבלאות קלטסכמה של טבלת פלט

לשלוף נתונים לפי תנאים אלו3לצבור על אטריבוטים אלו

4

? זה למבנה מתאימה הבאה שאלתה האםSELECT student_id, course_name, AVG(grade)FROM Grades GROUP BY student_id;

:הבנת השגיאה עבורstudent_id מסוים יכולים להיות כמה רשומות עם

שמות שונים של קורסיםDBMS!לא יודעת מאיזו רשומה לקחת שם קורס

Page 11: SELECT :  שימוש בפונקציות צבירה

נצטרך לקחת בחשבון שייתכנו שני סטודנטים עםאותו שם

11

: לכתוב שאילתה המציגה, עבור כל 6דוגמה סטודנט, את השם שלו ביחד עם ממוצע הציונים

SELECT S.name, ROUND(AVG(G.grade), 2)FROM Grades G, Students SWHERE G.student_id=S.student_idGROUP BY S.student_id, S.name

Page 12: SELECT :  שימוש בפונקציות צבירה

SELECT student_id, MAX(grade)FROM GradesGROUP BY student_idHAVING AVG(grade)<75;

לשלוף נתונים לפי תנאים אלו

הגענו למבנה הבאה שלSELECT:SELECT AVG)A1(, MIN)A7(, A3, A4FROM T1, T2, T3WHERE תנאיםGROUP BY A2, A3, A4HAVING MAX(A2)>5 OR COUNT(A7)<100

12

: לכתוב שאילתה המציגה, עבור כל סטודנט 7דוגמה , מס' שלו והציון הכי 75עם ממוצע הציונים פחות מ-גבוה

123

5

4

טבלאות קלטסכמה של טבלת פלט

לצבור על אטריבוטים אלו לשלוף נתונים לפי תנאים אלוהמשתמשים בפונקציות צבירה


Recommended