Sum על חלק מהתוצאות - SQL
-
@מנצפך לעשות IF על העמודה השנייה
לדוגמא,IF(day=1,price,0)
כאשר אתה בודק אם התנאי מתאים למה שאתה רוצה, ואם כן אתה מעביר את הסכום, אחרת, אתה מחזיר אפס.
על השדה הזה אתה עושה SUM.שים לב, לגבי הIF, זה תלוי מה המסד שלך.
באקסס זה IIF, בSQL ובMYSQL זה IF
https://www.w3schools.com/sql/func_mysql_if.asp -
@מנצפך אז ברור שלכאורה הוא לא הכי יעיל בכמויות
אולי תעשה עוד שאילתה (תצוגה) שמורה, ותחבר בינהם בJOIN -
@clickone למה זה ברור שזה לא יעיל בכמויות?
הרי זה רק תנאי נוסף באותו לולאה
זה לא לולאה חדש@upsilon01 כי אתה עושה עליו SUM.
ז"א, קודם אתה אוסף את הנתונים, לפני הSUM.
עושה את הIF על כל הנתונים, גם על מה שלא נכלל בתנאי (ימים שהם לא יום ראשון בדוגמא שהוא הביא)
ובסוף אתה עושה את הSUM על הערכים שחזרו.
בקצת רשומות ובקשות זה בכלל לא משמעותי. אבל אם יש הרבה בקשות והרבה רשומות אני חשוב שזה טיפה יקר מבחינת ביצועים (לא בדקתי)
השיטה השנייה שהצעתי, לעשות תצוגה שמורה, יותר יעילה עקרונית, כי קודם נעשה WHERE על הרשומות, ומגיעים רק הרשומות הרלוונטיות, ועליהם נעשה הSUM, ורק אח"כ מחברים אותה לתצוגה הראשית עם JOIN (אפשר כמובן גם עם שאילתת משנה.)לא בדקתי את מה שאני כותב לעומק.
רק תחושת בטן וטיפה מנסיון שזה "נראה" רץ יותר יעיל וזריז. -
@upsilon01 כי אתה עושה עליו SUM.
ז"א, קודם אתה אוסף את הנתונים, לפני הSUM.
עושה את הIF על כל הנתונים, גם על מה שלא נכלל בתנאי (ימים שהם לא יום ראשון בדוגמא שהוא הביא)
ובסוף אתה עושה את הSUM על הערכים שחזרו.
בקצת רשומות ובקשות זה בכלל לא משמעותי. אבל אם יש הרבה בקשות והרבה רשומות אני חשוב שזה טיפה יקר מבחינת ביצועים (לא בדקתי)
השיטה השנייה שהצעתי, לעשות תצוגה שמורה, יותר יעילה עקרונית, כי קודם נעשה WHERE על הרשומות, ומגיעים רק הרשומות הרלוונטיות, ועליהם נעשה הSUM, ורק אח"כ מחברים אותה לתצוגה הראשית עם JOIN (אפשר כמובן גם עם שאילתת משנה.)לא בדקתי את מה שאני כותב לעומק.
רק תחושת בטן וטיפה מנסיון שזה "נראה" רץ יותר יעיל וזריז. -
@upsilon01 כי אתה עושה עליו SUM.
ז"א, קודם אתה אוסף את הנתונים, לפני הSUM.
עושה את הIF על כל הנתונים, גם על מה שלא נכלל בתנאי (ימים שהם לא יום ראשון בדוגמא שהוא הביא)
ובסוף אתה עושה את הSUM על הערכים שחזרו.
בקצת רשומות ובקשות זה בכלל לא משמעותי. אבל אם יש הרבה בקשות והרבה רשומות אני חשוב שזה טיפה יקר מבחינת ביצועים (לא בדקתי)
השיטה השנייה שהצעתי, לעשות תצוגה שמורה, יותר יעילה עקרונית, כי קודם נעשה WHERE על הרשומות, ומגיעים רק הרשומות הרלוונטיות, ועליהם נעשה הSUM, ורק אח"כ מחברים אותה לתצוגה הראשית עם JOIN (אפשר כמובן גם עם שאילתת משנה.)לא בדקתי את מה שאני כותב לעומק.
רק תחושת בטן וטיפה מנסיון שזה "נראה" רץ יותר יעיל וזריז. -
@clickone לא נכון.
הIF אמור להיות מבוצע בשאילתת הSQL.
אם מתאים התנאי הערך הוא הסכום, ואם לא, 0. והחישוב הוא רק על השדה המחושב שמכיל את הנתונים המחושבים.מה שכן שבWHERE שיכניס רק מה שהוא רוצה, ובכך ימנע משליפה מיותרת.
@Shmuel754 אתה צודק. אבל הוא רוצה לעשות SUM על הכל, ובנוסף עוד SUM עם תנאי.
אז אין לו כאן WHERE.
בעצם הSQL אמור קודם לחשב את הכל, ואח"כ לרוץ לעשות SUM.
ולכן כתבתי מה שכתבתי.
ושוב, לדעתי כדאי שמישהו יעשה בדיקה ויודיענו דבר