דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ביצוע שאילתא על כל הקבוצות בטבלה

ביצוע שאילתא על כל הקבוצות בטבלה

מתוזמן נעוץ נעול הועבר תכנות
9 פוסטים 3 כותבים 163 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • nigunN מנותק
    nigunN מנותק
    nigun
    כתב ב נערך לאחרונה על ידי
    #1

    (נראה לי שזה שאלה פשוטה אבל אני לא מצליח למצוא את מילות חיפוש בשביל זה בגוגל)
    יש לי מסד נתונים עם משתמשים שמחולקים לקבצות
    אני רוצה לבצע שאילתות לפי קבוצה
    למשל מה הממוצע הציונים בכל כיתה
    אז אם יש לי טבלה של "ילד,ציון,כיתה"
    אני רוצה לקבל קודם את כל הקבוצות (אני לא יודע מראש מה כל הקבוצות)
    ולקבל את הSUMואת הCONT של כל קבוצה
    (את הממצוע אני יחשב לבד)
    השאלה היא האם אני צריך לעשות את זה בשני שאילתות או שיש דרך לשלב את זה בשאילתא אחת?

    מייל: nigun@duck.com

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי
      #2

      קוראים לזה שאילתת קיבוץ.

      
      SELECT כיתה, COUNT(*), SUM(ציון), AVG(ציון)
      FROM TABLE
      GROUP BY כיתה
      

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      nigunN תגובה 1 תגובה אחרונה
      5
      • nigunN מנותק
        nigunN מנותק
        nigun
        השיב לdovid ב נערך לאחרונה על ידי dovid
        #3

        @dovid
        עכשיו משהו קצת יותר מסובך
        יש לי טבלה עם נתונים של חידון עם העמודות
        room,user,points,time,group
        כל פעם שמישהו עונה אני רושם איזה חידון (room) את המשתמש, כמה נקודות הוא קיבל,את הזמן (לא רלוונטי כרגע)
        ואת הקבוצה שלו

        אני רוצה לקבל את הנתונים של כל קבוצה

        1. מה הקבוצה עם הכי הרבה נקודות+ עם הזמן הכי נמוך
        2. את המיקום שלה בסדר הנ"ל (אני יכול ליצור את זה גם בלולאה מחוץ לשאילתא כנראה)
        3. את הממצוע של הנקודות של כל קבוצה

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

        SELECT rank ,group  
        FROM (   SELECT points.*, @rank := @rank + 1 rank
                        FROM (     SELECT grup,time 
                                         FROM points  where room =123
                                         GROUP BY ;group ) points,
                        (SELECT @rank := 0) init   
                        ORDER BY SumPoints DESC,time ASC ) r;"
        

        השאלה היא איך אני מוציא את הערך של הממוצע של הקבוצה?
        (אם זה מסבך את העניינים אני יכול לוותר על הrank ולהוסיף אותו ע"י לולאה מחוץ לשאילתא)

        מייל: nigun@duck.com

        OdedDvirO תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי dovid
          #4

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

          SELECT group, 
            SUM(points) AS `POINTS`,
            SUM(time) AS `TIME`, 
            SUM(points) / SUM(time) AS `RANK`, 
            AVG(points) AS `AVRAGE_POINTS`
          FROM points  
          GROUP BY group
          ORDER BY AVRAGE_POINTS DESC 
          

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          nigunN תגובה 1 תגובה אחרונה
          1
          • OdedDvirO מנותק
            OdedDvirO מנותק
            OdedDvir
            השיב לnigun ב נערך לאחרונה על ידי OdedDvir
            #5

            @nigun אמר בביצוע שאילתא על כל הקבוצות בטבלה:
            ערבבת כאן כמה דברים:

            אני רוצה לקבל את הנתונים של כל קבוצה

            מה הקבוצה עם הכי הרבה נקודות+ עם הזמן הכי נמוך
            את המיקום שלה בסדר הנ"ל (אני יכול ליצור את זה גם בלולאה מחוץ לשאילתא כנראה)

            תוסיף לשאילתה למעלה

            SELECT כיתה, COUNT(*), SUM(ציון) AS TotalMark, AVG(ציון) AS AverageMark, SUM(זמן) AS TotalTime
            FROM TABLE
            GROUP BY כיתה
            

            ותשרשר שאילתות קיבוץ נוספות על השאילתה הנ"ל, למשל לקבלת הכיתה עם הציון הכי גבוה

            SELECT T.כיתה, MAX(T.TotalMark)
            FROM (
            SELECT כיתה, COUNT(*), SUM(ציון) AS TotalMark, AVG(ציון) AS AverageMark, SUM(זמן) AS TotalTime
            FROM TABLE
            GROUP BY כיתה) AS T
            GROUP BY T.כיתה
            

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

            SELECT T.כיתה, MAX(T.TotalMark)
            FROM (
            SELECT כיתה, SUM(ציון) AS TotalMark
            FROM TABLE
            GROUP BY כיתה) AS T
            GROUP BY T.כיתה
            

            את הממצוע של הנקודות של כל קבוצה

            זה לא מה שכבר מחושב למעלה?

            SELECT ..... AVG(ציון)
            
            תגובה 1 תגובה אחרונה
            2
            • nigunN מנותק
              nigunN מנותק
              nigun
              השיב לdovid ב נערך לאחרונה על ידי nigun
              #6

              @dovid
              צודק
              @OdedDvir
              אני צריך ממוצע של המשתמש בקבוצה
              זאת אומרת כל שורה כתוב כמה נקודות המשתמש קיבל על השאלה הספיציפית
              למשל אם ענה על שלוש שאלות יש שלוש שורות שכתוב בהם 5 נקודות
              אם בקבוצה יש 10 תלמידים אז יש 30 שורות שכתוב בהם (בעמודה של נקודות) 5
              אם אני יעשה ממוצע אני יקבל כנראה את הספרה 5
              ואם אני יעשה סיכום של הקבוצה אני יקבל 50
              אבל אני רוצה לקבל את הממוצע של הקבוצה פר משתמש
              זאת אומרת 15.

              בהמשך היום אני אתיישב לכתוב בישוב הדעת משהו יותר ברור

              מייל: nigun@duck.com

              OdedDvirO תגובה 1 תגובה אחרונה
              0
              • OdedDvirO מנותק
                OdedDvirO מנותק
                OdedDvir
                השיב לnigun ב נערך לאחרונה על ידי OdedDvir
                #7

                @nigun אמר בביצוע שאילתא על כל הקבוצות בטבלה:

                אבל אני רוצה לקבל את הממוצע של הקבוצה פר משתמש
                זאת אומרת 15.

                בסדר, גם פה אפשר שתי שאילתות קיבוץ משורשרות, ברשותך אני אכתוב רק באנגלית כי זה הכי נוח לי:
                א - חישוב סה"כ ניקוד לתלמיד

                SELECT ClassID, StudentID, SUM(Score) AS StudentTotalScore
                FROM table
                GROUP BY ClassID, StudentID
                

                ב - חישוב הממוצע של הכיתה:

                SELECT T.ClassID, AVG(T.StudentTotalScore) AS ClassAverageScore
                FROM (SELECT ClassID, StudentID, SUM(Score) AS StudentTotalScore
                FROM table
                GROUP BY ClassID, StudentID ) AS T
                GROUP BY T.ClassID
                
                nigunN תגובה 1 תגובה אחרונה
                2
                • nigunN מנותק
                  nigunN מנותק
                  nigun
                  השיב לOdedDvir ב נערך לאחרונה על ידי
                  #8

                  @OdedDvir
                  עבד מצויין
                  רק הייתי צריך להוריד את הסוגריים ב

                  GROUP BY (ClassID, StudentID)
                  
                  

                  לא יודע למה?
                  (החזיר לי שגיאה Operand should contain 1 column(s)
                  ופעם הבאה אני אשתדל להיות יותר ברור

                  מייל: nigun@duck.com

                  OdedDvirO תגובה 1 תגובה אחרונה
                  0
                  • OdedDvirO מנותק
                    OdedDvirO מנותק
                    OdedDvir
                    השיב לnigun ב נערך לאחרונה על ידי
                    #9

                    @nigun יתכן שבאמת הן מיותרות (לא בדקתי בשטח).. מתקן

                    תגובה 1 תגובה אחרונה
                    0

                    בא תתחבר לדף היומי!
                    • התחברות

                    • אין לך חשבון עדיין? הרשמה

                    • התחברו או הירשמו כדי לחפש.
                    • פוסט ראשון
                      פוסט אחרון
                    0
                    • דף הבית
                    • קטגוריות
                    • פוסטים אחרונים
                    • משתמשים
                    • חיפוש
                    • חוקי הפורום