אוקיי אז ככה, יש לי טבלת עובדים שיש בה 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 של העובדים הנכון.
ניסיתי גם לבצע עוד חיתוכים בין הטבלאות אבל זה עדיין לא כ"כ הולך.
יש למישהו רעיון?
תודה