21-12-2004, 10:21
|
|
|
|
חבר מתאריך: 30.10.01
הודעות: 8,699
|
|
|
אולי אני מתחיל להבין...
בתגובה להודעה מספר 16 שנכתבה על ידי שימי שמתחילה ב "כנראה ששוב MySQL "הפשוט" מראה עליונות על ה DBים "הגדולים ממנו"..."
ציטוט:
במקור נכתב על ידי שימי
בבקשה, אסביר....
GROUP BY, תפקידו (למיטב הבנתי), לקבץ ערך בודד (אחד...) עבור כל סט רשומות שאותו שדה מכיל 1 או יותר ערכים כמוהו, ואותו לפלוט החוצה לשואל השאילתא. כך למשל ניתן לאחד את כל סכומי המשכורות בשנה, של כל עובד, בהנתן טבלה שמכילה את המשכורות שקיבל כל עובד בחברה, עם שדה שבו כתובת השנה - עושים GROUP BY year. כיוון שאנחנו רוצים לקבץ אך ורק על פי שנה (ולא למשל לקבץ גם את העובדים - אנחנו כן רוצים רשימה של כל עובד וכמה הוא קיבל במהלך השנה, ולא סיכום של כל המשכורות של כל העובדים) - אז נעשה רק GROUP BY year.
|
זה מעניין מה שאתה אומר...
בעצם אתה מבקש מ MySQL לקבץ והוא יעשה "משהו" עם הנתונים.
אתה נתת שתי אפשרויות:
"לאחד את כל סכומי המשכורות בשנה" (פונקצית סכום עבור כל עובד)
או לחילופין
"לקבל רק את האנשים הראשונים שחברים בכל אחת מהקבוצות" (פונקצית בחירה לפי מספר רשומות)
אז כנראה שמסדי הנתונים האחרים קצת יותר טיפשים ודורשים מהמשתמש להגדיר בדיוק מה הוא רוצה.
באורקל למשל, את שתי האפשרוית הייתי מיישם ככה:
קוד:
SQL> select JOB,sum(SAL) from EMP group by JOB;
JOB SUM(SAL)
--------- ----------
ANALYST 6000
CLERK 4150
MANAGER 8275
PRESIDENT 5000
SALESMAN 5600
האפשרות השניה קצת יותר מסובכת באורקל, צריך להגיד לו איך לבחור את "הערך הראשון"
למשל לפי מספר העובד הנמוך ביותר לכל מקצוע:
קוד:
SQL> select JOB,min(EMPNO) from EMP group by JOB;
JOB MIN(EMPNO)
--------- ----------
ANALYST 7788
CLERK 7369
MANAGER 7566
PRESIDENT 7839
SALESMAN 7499
שים לב שלצורך הדוגמאות השתמשתי באותה טבלת EMP מהדוגמא של אורקל (יש בה עוד כמה עמודות שלא הצגתי קודם)
לצורך העניין הנה העמודות הרלוונטיות:
קוד:
SQL> select EMPNO,ENAME,JOB,SAL from EMP;
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
כנראה שההתנהגות הזו, שלא מנסה לנחש איזו פונקציה אתה מעוניין להפעיל על הערך המקובץ, משותפת לעוד כמה מסדי נתונים.
_____________________________________
_________________________________________________
אזהרה: משרד הבריאות קובע כי העישון מזיק לבריאות !
תראו, אפילו החייזר נהיה ירוק מזה
|