
Where UnitPrice >= Avg(UnitPrice) נכשל. המערכת מציגה שגיאה שפונקציית aggregate לא יכולה להופיע כך ב-Where.Where UnitPrice >= (Select Avg(UnitPrice) From Products). הרצה של תת-השאילתה לבדה מחזירה את הממוצע עצמו.Order By UnitPrice רואים שהמחירים מתחילים מ-30 ומעלה, כי הממוצע הוא 28 ומשהו. אפשר להציג רק ProductName ו-UnitPrice, ולפרוס את השאילתה על כמה שורות לקריאות.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת תת-שאילתות ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
מה קורה אם אנחנו רוצים לבצע שאילתא שמשתמשת באיזשהו חישוב נפרד? מה הכוונה? בואו נעשה דבר כזה Select all from products where unit price גדול או שווה ובדיוק פה אני רוצה את הממוצע של המחירים אבל אין לי את ממוצע המחירים ממוצע המחירים זה חישוב שאני צריך לבצע הוא לא קיים לי איפשהו אז אתם יכולים להגיד
ומה הבעיה? בוא תיקח average של unit price כי average זה הממוצע, ראינו את זה בפונקציות גרופינג אבל זה לא יעבוד. בואו נריץ.
חטפנו שגיאה, המערכת מציגה פה את השגיאות והיא אומרת שפונקציית aggregate שזה בעצם הגרופ פונקשיונס לא יכולה להיות כאן בתוך where ככה סתם זרוקה. היא יכולה להיות כאן כמו שראינו אולי היא יכולה להיות בעוד איזה מקום, אבל פה היא לא עובדת.
המערכת לא מצליחה להפעיל אותה בצורה כזאת. מה אנחנו רוצים שיופיע פה? אנחנו רוצים שיופיע פה הממוצע. לכן אנחנו יכולים לבצע משהו שנקרא תת-שאילתא.
תת-שאילתא זאת בעצם שאילתת SQL שנמצאת בתוך שאילתת SQL אחרת. המערכת קודם כל מחשבת את התת-שאילתא, מחזירה ממנה את התוצאה, ולוקחת את התוצאה הזאתי ומשתמשת איתה בשאילתה החיצונית.
כל תת-שאילתה חייבת להיות בתוך סוגריים עגולים. אז אנחנו יכולים לכתוב פה תת-שאילתה של Select Average של Unit Price From Product. אם אני עכשיו אריץ אך ורק את תת-השאילתה, אני אקבל את הממוצע האמיתי.
אם אני אריץ את כלל השאילתה, אני אקבל את כל המוצרים שהמחיר שלהם גדול או שווה לממוצע כי כאן חזר לי הממוצע ששולב בתוך שאילתה חיצונית יש לנו inner query ו-outer query בואו אולי נמיין את זה order by unit price נריץ ויש לנו כאן את ה-unit price ותסתכלו שה-unit price מתחיל משלושים כי הממוצע שלו של כלל המחירים
היה עשרים ושמונה אז אנחנו רואים שהוא מתחיל