ABA


"|שאלה| מחפש פתרון לשאילתא הבא ללא שימוש בSUBSELECT"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #15749 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15749
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   11:07   12.06.10   
אל הפורום  
  |שאלה| מחפש פתרון לשאילתא הבא ללא שימוש בSUBSELECT  
 
   אוקיי אז ככה, יש לי טבלת עובדים שיש בה 3 עמודות:
empno - מפתח ראשי - מספר עובד
deptno - קוד המחלקה, מורכב מ-3 תווים - לא ממש רלוונטי מה הערכים
salary - משכורת

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

השאילתא שיש לי היא:


SELECT deptno, COUNT(*)
FROM t_empl emp
WHERE (salary > 30000) AND
(2 < (SELECT COUNT(*) FROM t_empl WHERE emp.deptno = deptno))
GROUP BY deptno;

עכשיו ככה - זה פועל מעולה ומחזיר את מה שצריך:


deptno COUNT(*)
A00 4
C01 1
D11 1
D21 1

אני מנסה למצוא דרך לבצע בדיוק את אותו הדבר - אבל ללא SUBSELECT בכלל, כלומר עם JOINS.

הגעתי למשהו שמביא לי את המחלקות כמו שצריך, אבל לא מחזיר את הCOUNT הנכון:


SELECT emp1.deptno, COUNT(emp2.deptno)
FROM t_empl emp1, t_empl emp2
WHERE emp2.salary > 30000 AND
emp2.deptno = emp1.deptno
GROUP BY emp1.deptno
HAVING COUNT(emp1.empno) > 2

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

יש למישהו רעיון?

תודה


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  אין לי מושג איך הצלחת להסתבך כל כך ליל קיץ 12.06.10 12:53 1
     אממ.. Dotan  12.06.10 13:13 2

       
ליל קיץ לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.2.10
10048 הודעות, 7 פידבק
   12:53   12.06.10   
אל הפורום  
  1. אין לי מושג איך הצלחת להסתבך כל כך  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 12.06.10 בשעה 12:57 בברכה, ליל קיץ
 
קודם כל חוק ברזל בנירמול טבלאות הוא ליצור טבלה של מחלקות, טבלה של עובדים וטבלה של עובדים במחלקות.
זה היה פותר לך את כל הבלאגן בלי שום בעיה.

בדוגמא שהבאת לJOIN לא יודע אם שמת לב אבל אין JOIN בכלל,
כי JOIN מיוחס ל -2 טבלאות לפחות וכאן יש לך רק אחת.
אין לי מושג מה עשית שם בכלל..

כמו שזה נראה לי,
הפתרון הראשון שהבאת הוא הנכון והכי מובן במקרה שלך


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   13:13   12.06.10   
אל הפורום  
  2. אממ..  
בתגובה להודעה מספר 1
 
   אתה צודק לגבי הטבלאות, אבל זה מצב נתון איך שהטבלה מסודרת.

ואפשר גם לעשות JOIN לאותה טבלה (פשוט לשלוף ממנה פעמיים)

וזו לא שאילתא שאני הולך להשתמש בה - אני יודע שהראשונה תקינה, אבל אני צריך למצוא דרך לעשות את אותו הדבר ללא הSUBSELECT (אתגר מסוים שקיבלתי ואני מנסה לפתור :/ )

רעיון אולי? :/


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net