עזרה עם שאילתת SQL

  • פותח הנושא BMWE
  • פורסם בתאריך

BMWE

New member
עזרה עם שאילתת SQL

שלום
אני מצרף חלק ממבנה מסד הנתונים. (* - עוד ערכים שיש בטבלה שאינם רלוונטיים)
יש לי רשימה של משתמשים בעלי מוצר מסויים והם יכולים להחליף אותו, אך לא יכולים להיולת עם יותר משני מוצרים בו זמנית.
אני רוצה לבצע סטטיסטיקה של פילוח המוצרים שיש ללקוחות.

TAC הינו מזהה המוצר שלפיו אפשרי להגיד מהו המוצר.

כתבתי את השאילתה הבאה אבל אני לא בטוח בה:

select Vendor.NAME, model.model_name
from Vendor, model
where (select current_TAC from current)=TACS.TAC


אשמח לתיקונים והכוונה לגבי איך לייצר את הסטטיסטיקה
 

BMWE

New member
תיקון:לא יכולים להיות יותר ממוצר אחד בו זמנית

 

pitoach

New member
2 נקודות

1. DDL+DML
בדוק את הקישור הבא:
http://ariely.info/Blog/tabid/83/En...e-DDL-and-Data-Manipulation-Language-DML.aspx

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

אז אנא פרט בדיוק מה אתה רוצה לקבל ומומלץ גם לצרף בהתאם ל DML את התוצאה שאתה מצפה לקבל. ז"א להראות איזה תוצאות היית מצפה לראות
 

BMWE

New member
סטטיסטיקה של פילוח המוצרים

כמה מוצרים קיימים אצל כל הלקוחות
 

pitoach

New member
כדי לחשב את זה פשוט צריך לבצע COUNT

ככה שסופרים את כל המוצרים
עם GROUP BY על השדה של הלקוחות

ככה תקבל בסיום עבור כל לקוח כמה מוצרים יש לו
 

pitoach

New member
נכנסת לקישור ולא הבנת?!?

אם כן אני חייב לתקן אותו ככה שהוא יהיה יותר מובן

אני לא יודע ולא יכול לחשוב על דרך להסביר את זה יותר פשוט

תבדוק שוב את הקישור ותעבור על כולו בבקשה
הקישור מסביר מה זה DDL ומה DML ולמה כדי לקבל עזרה אנחנו צריכים שתמיד בפורום כששואלים שאלה יצרפו לנו DDL+DML ולא תמונות

תעבור שוב על הקישור בבקשה לעומק ולא רק בריפרוף של שורה ראשונה ואחרונה
ואז תוכל לצרף לנו DDL+DML
 

BMWE

New member
בבקשה

חסר לי רק הקישור בין הטבלאות כפי שיש בקובץ הראשון שצורף
 

pitoach

New member
עתה אפשר לדון בשאלה אבל צריך הבהרה

* תראה כמה הקוד היה יעיל!
עכשיו פתאום רואים שאתה בכלל לא עובד בשרת SQL אלא כנראה ב MYSQL ולא כתבת לנו את זה

כמה נקודות
1. העבודה בסוגי שרתים שונים היא שונה מאוד. כדאי לציין תמיד באיזה שרת אתה עובד.

2. אני לא מצליח להבין את המבנה של הנתונים שלך. השמות של הטבלאות חוץ אולי מ Vendor וכן Model לא אומרים כלום. הקשרים בין הטבלאות לא ברורים לי
היכן בכלל יש לך טבלה של לקוחות?
אתה כותב ש TAC הוא מזהה מוצר ייחודי ומסמן שלנו שיש קשר יחיד לרבים בין TACS לבין [model]. האם יכול להיות שמוצר מסויים יש לו כמה מודלים ? כיצד מוצר יכול להיות מקושר למודלים רבים? או שאני לא מבין מה הכוונה שלך בטבלה של [model]
אתה יכול לנסות להבהיר את הקשרים של הטבלאות ומה זה בדיוק כל טבלה אצלך?
בעיקר חסר לנו מה הקשר בין המוצרים לבין הלקוחות. כי אצלך אין קשר בין הטבלאות גם לא בציור וגם לא בקוד
 

BMWE

New member
1. העבודה היא על בסיס אורקל

אבל השאילתות (או לפחות הבסיס שלהן) הוא אותו בסיס, הלא כן?

2. את הקשרים בין הטבלאות ראית בהודעה הראשונה (לצערי לא אני אפיינתי את הבסיס נתונים, כך שזה מה שיש)
טבלת לקוחות - current
לגבי המוצרים - תחשוב למשל שיש לך מזגנים של מספר יצרנים: תדיראן, אמקור...אז יש לך ללמזגן אמקור מספר דגמים מטאור, פלטינום... ולכול מזגן כזה יש מזהה חד חד ערכי (TAC) שאינו יכול להיות זהה בין 2 חברות שונות.
טבלת models הינה הטבלה של הדגמים (מטאור, פלטינום...)

אם אמשיך עם הדוגמה: TACS - טבלה של המזהה החד חד ערכי של המזגן. vendor - טבלה של היצרנים של המזגנים. model - טבלה של הדגמים של המזגנים. (אם אני מוסיף מזגן חדש אני מעדכן את טבלת ה models וה TACS. אם אני מוסיף מזגן חדש מחברה חדשה, אני מעדכן את כל 3 הטבלאות)
ו current - זה המצב הנוכחי של המזגנים שיש ללקוחות.
כעיקרון אין קשר ישיר בין הלקוחות למזגנים. הקשר היחיד שיכול לזהות את המזגן הספציפי ללקוח מסויים הוא ה TAC. בטבלת הלקוחות כאשר יש c_TAC נתון, אזי בתשאול של הטבלאות האחרות אפשרי לזהות בדיוק את היצרן ודגם המזגן.
 

pitoach

New member
כמו שהצגתי יש סתירה בין התמונה לבין ההסבר

לפי מה שאני מבין

למשל אתה מציג בתמונה קשר יחיד לרבים בין טבלת המזגנים tacs (שהיא לפי מה שאני מבין טבלה הזהה לטבלת מספרים סידוריים של מזגנים מסויימים) לבין טבלת המודלים
האם יכול להיות שמזגן מסויים יש לו כמה מודלים?

היחס בין הקבלים לבים המודלים הוא הגיוני. לכל קבלן יש כמה מודלים שהוא מייצר

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

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

2. האם הבנתי נכון וטבלה ה TACS היא כאילו טבלה של המספרים הסידוריים של המסגנים ז"א היא טבלה של המזגנים עצמם?

3. האם הבנתי נכון והקשר של הלקוח הוא אל המוצר היחודי שהוא קנה ז"א את טבלת ה TACS ?

4. אם זה המצב האם כל מה שאתה רוצה זה כמה מוצרים יש לכל לקוח?
אם כן אתה לא צריך שום טבלה פרט לטבלת הלקוחות.
select count(*)
from [current]
group by customer

ה DML שלך ממש לא טוב כי הוא לא נותן מספיק אינפורמציה וקיבלתי בתוצאה שכל לקוח יש לו בדיוק מוצר אחד

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

אם זה מה שחיפשת אז אני שמח שזה עזר
 

BMWE

New member
הקשר בין הלקוחות למוצרים הוא עקיף

אם בהוספת ערך בטבלת TACS יגרור אחריו הוספת ערך בטבלת models, הוספת ערך בטבלת הלקוחות לא תגרום למצב כזהה.

1. לא. לכל רכב פיאט יש מזהה. ברגע שאמרת קוד דגם, ישר אפשר לדעת על איזה רכב אתה מדבר.
2. הטבלה היא לא של מספרים סידוריים, אלא של מזהים חד חד ערכיים שלהם שיכולים להיות כל מיני.
3. אפשר להגיד ככה.
4. לא. אני רוצה את הפילוח (X מדגם א, Y מדגם ב'...) של המוצרים שיש לכל הלקוחות (לכל לקוח יש רק אחד). רק שלא מעניין אותי ה TAC שיש, אלא מעניין אותי למה ה TAC הזה מתורגם (לשם יצרן ומודל).
5. אני מקוה שההערה ב 4 היתה מספיק ברורה


ואם עדיין לא הבנת, אני בעצם צריך לתשאל את כל הלקוחות, איזה TAC יש להם, לפלח (ל TAC A יש 5, ל TAC B יש 10....) ולבסוף להוציא בפלט את התרגום של ה TAC ליצרן ומודל (פיאט פנדה - 5 מכוניות, פורד פוקוס - 10 מכוניות)
או לחילופין צריךך לתשאל את כל הלקוחות, איזה TAC יש להם לתרגם ה TAC ליצרן ומודל (פיאט פנדה, פורד פוקוס) ולבסוף לבצע את הפילוח לפי המודל (שאינו זהה בין היצרנים).
 

pitoach

New member
אתה יודע לעבוד עם ELFT JOIN?

לפי מה שאני מבין עכשיו מסעיף 4 מה שאתה צריך זה פשוט להציג את הנתונים מטבלת הלקוחות current ואז לבצע LEFT JOIN כדי למשוך את הנתונים החסרים מהטבלאות האחרות (יד כאן כמה LEFT JOIN אחד אחרי השני)

אני כרגע מתקין את השרת פיתוח שלי (וכן כמה שרתים חיים) מההתחלה ואין לי עדיין SQL בשרת הפיתוח. אני מעביר חלק ניכר מהשרתים לעבוד עם SQL 2012 ורק סיימתי להתקין את מערכת ההפעלה ואפילו PDF עדיין אני לא יכול לראות. לכן אני אוכל להמשיך רק בערב או מחר ואני אנסה להגיע לכך. שלח לי תזכורת במסר בבקשה ואני אשמח לחזור לבעיה (היא כבר נגררת אחורה ואנחנו לא רוצים שתשכח)
 

pitoach

New member
תבדוק אם זה מה שאתה מחפש

יש לך כאן 2 שאילתות. תבדוק אם אחת מהן היא מה שאתה מחפש (השנייה כניראה)

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

אני מקווה שזה עוזר לך (מצורף בקובץ טקסט).
 

BMWE

New member
השאילתה השנייה יותר רלוונטית

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

כל שנותר הוא להתאים למה שאני צריך באמת ולבדוק אחרי החג.

המון תודה
 
למעלה