פונקצית MAX בSQL

zag78

New member
פונקצית MAX בSQL

כשאני משתמש בפונקצית MAX, אני מקבל את המשתנה עם הערך הגבוה ביותר.
אך מה קורה כשיש 2 משתנים (או יותר) בפיסגה? הפונקציה מחזירה לי רק אחד מהם.
איך אוכל לקבל את כל המשתנים שחולקים את הערך הגבוה ביותר?
 

גרי רשף

New member
השאלה אינה ברורה

נניח שהערכים הם: 1,2,2,3,3,3,4,4,4,4
הערך המקסימלי הוא 4.
מה זה משנה אם הוא מופיע כמה פעמים? הוא עדיין המקסימלי..

הסבר למה התכוונת..
 

zag78

New member
בדוגמא שלי זה משנה.

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

גרי רשף

New member
אם אני מבין נכון..

..אתה לא רק מחפש את המספר 4 (בדוגמה שלי) אלא את כל מי שהערך שלו הוא 4.
יש לזה מספר פתרונות וכדאי לבדוק את היעילות. למשל:
With T As
(Select Count(*) Over(Partition By ...) N,
*
From MyTbl)
Select Top 1 With Ties *
From T
Order By N Desc;
 

pitoach

New member
איזה גרסה של SQL יש לך?

יש שינויים בין גרסאות שונות. למשל הפונקציה שגרי רשם (זה סוג של פוקנציה שנקראת פונקציית חלון) לא תעבוד בגרסאות ישנות, אבל היא יכולה להיות מאוד טובה כשהיא עובדת.
* בכל מקרה צרף לנו DDL+DML אז נוכל לבדוק מה מתאים לך יותר טוב (וכמובן הגרסה שאיתה אתה עובד).
* פונקציות חלון נוספות שעובדות בגרסאות יותר נמוכות ויכולות לעזור הן row_number וכן rank (אפשר לתת פתרון באמצעות כל אחת מהן) ובגרסאות הרבה יותר ישנות אפילו אפשר לעבוד עם שאילתה פנימית למשל (לא יעיל בדרך כלל)
 
למעלה