• בלוג
  • עמוד 12
  • סדרת SQL בסיסי - פוסט 19 - פונקציות לסיכום מידע

סדרת SQL בסיסי - פוסט 19 - פונקציות לסיכום מידע

28/08/2024

עד עכשיו השתמשנו בבסיס הנתונים בתור מחסן לטבלאות אקסל - אנחנו כותבים לשם מידע ויכולים למשוך שורות שמעניינות אותנו. בחלק זה נעבור ללמוד על הפונקציות לסיכום מידע ונפעיל אותן על כל השורות או על קבוצות של שורות.

1. הפונקציה sum

פונקציה ראשונה לשיעור היא sum, ותפקידה לחשב סכום של ערכים. בניגוד לפונקציות שראינו עד עכשיו בקורס, פונקציות סיכום מידע אינן פועלות על ערך בודד אלא על אוסף של שורות והן מסכמות את המידע בשורות אלה. כך הפונקציה sum לא תסכום ערכים מכמה עמודות (בשביל זה נוכל להשתמש בסימן + בצורה רגילה) אלא תסכום את הערכים של אותה עמודה בין כמה שורות.

בשביל הדוגמה אני אקח את נתוני הדוגמה של SQLime ועל בסיס הנתונים אפעיל:

select *, SUM(salary) from employees;

התוצאה עשויה להפתיע:

id  name    city    department  salary  SUM(salary)
11  Diane   London  hr  70  942

קיבלנו תוצאה אחת והיא השורה הראשונה ברשימת התוצאות. כל הערכים בתוצאה הם הערכים של השורה הראשונה מלבד הערך SUM(salary). ערך זה מציג את סכום כל המספרים בעמודת ה salary.

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

select SUM(salary) from employees;

2. הפונקציה COUNT

הפונקציה count סופרת ערכים. יש שתי דרכים להשתמש בה - אנחנו יכולים להשתמש בה כדי לספור כמה שורות יש בקלט:

select count(*) from employees;

או כדי לספור כמה ערכים שאינם NULL יש בעמודה מסוימת בקלט:

select count(name) from employees;

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

select count(*), sum(salary) from employees;

3. הפונקציה AVG

הפונקציה avg מחשבת את הממוצע של עמודה מספרית:

select count(*), sum(salary), avg(salary) from employees;
count(*)    sum(salary) avg(salary)
13  942 94.2

אם תפעילו אותה על עמודה שאינה מספרית תקבלו 0 או שגיאה, תלוי בבסיס הנתונים.

4. הפונקציות min ו max

נסיים עם שתי הפונקציות min ו max שמחזירות את הערך הקטן ביותר והגדול ביותר בקלט:

select count(*), sum(salary), avg(name), min(salary), max(salary) from employees;