עזרה בשאילתא

squishi

New member
עזרה בשאילתא

כתבתי את השאילתא הבאה:
select QuestionID, QuestionSubjectID, COUNT(*) as Num_of_students
from TABLE_NAME
group by QuestionID, QuestionSubjectID

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

הבעיה - יתכן ואותו תלמיד ענה על השאלה הזו יותר מפעם אחת - ואז הוא נספר פעמיים, שלוש או יותר...
איך אני יכולה לדאוג לכך שתלמיד יספר פעם אחת בלבד בהתייחס לשאלה בנושא מסוים?

המון תודה לכם!
 

i t a i b

New member
distinct

היי,

אתה יכול קודם להריץ את השאילתא עם distinct שהמטרה שלה להוריד כפילויות ואז על הפלט לעשות את החישוב..

בהצלחה
 

squishi

New member
דרך מהירה?

תודה איתי...
יש דרך קלילה לעשות זאת?
כי הדבר היחיד שעולה לי זה ליצור טבלה חדשה ועליה לעשות את החישוב
 

AvidaEinav

New member
מה החוקיות?

אם תלמיד ענה על שאלה מס' 1 ב 3 נושאים שונים, אם הבנתי נכון את רוצה לספור אותו רק פעם אחת - אבל לאיזה נושא את רוצה לשייך אותו?
אם זה לפי סדר מסויים את יכולה להשתמש ב ROW_NUMBER ולבקש רק את מספרי 1 - ראי קובץ מצורף..
 

squishi

New member
הכוונה היא

הכוונה היא שתלמיד ענה על שאלה מס' 1 בנושא מס' 1 (רק לצרך הענין כמובן) - ועליה ספציפית ענה יותר מפעם אחת
 

AvidaEinav

New member
כמו שאיתי הציע..DISTINCT

יפתור לך את הבעיה..
ראי דוגמא בקובץ
 

squishi

New member
אדיר

יצא לי להתקל בשימוש ב-WITH, אבל כנראה שלא הפנמתי אותו מספיק...
תודה רבה לכם, עזרתם לי מאד!

אני מתנצלת שאולי אלה שאלות בסיסיות יחסית, אני פשוט לא מאד חזקה בתחום, אבל זה היה חשוב למחקר שאני עושה
שוב תודה וערב נעים
 
אפשר גם עם subquery - הביצועים זהים

SELECT QuestionID,QuestionSubjectID,COUNT(*) AS Num_of_students
FROM (
SELECT DISTINCT UserID,QuestionID,QuestionSubjectID
FROM #T
)a
GROUP BY QuestionID,QuestionSubjectID
 

squishi

New member
יפה

זה נראה מאד אינטואיטיבי
תודה לך, אוהב להתווכח
 
למעלה