פילוח נתונים ב mySQL
-
יש לי רשימה נניח מאה אנשים עם הפרטים שלהם, אחד הפרטים הוא עיר.
אני רוצה פילוח כמה יש בכל עיר, אבל רק של ערים בהם יש יותר מ15 אנשים נניח.
כל השאר ירוכזו בקטגוריה "כל הערים"
בא נגיד בסופו של דבר אני צריך רשימה כזו:
כאשר גבעת זאב/קרית יערים/ ועוד שיש בהם פחות מ15 בכל אחד ירוכזו תחת כל הערים.
אשמח לקבל כיון עבודה.
תודה -
@dovid אמר בפילוח נתונים ב mySQL:
SELECT IF(CountCIty > 15, City, "כל הערים"), SUM(CountCIty) FROM ( SELECT City, Count(ID) AS CountCIty FROM Table GROUP BY City ) GROUP BY IF(CountCIty > 15, City, "כל הערים")
התחביר הזה ספציפית נכון רק לmySql. אבל הרעיון תמיד אפשרי.
עבד מצויין מלבד תיקון קטן שזה דרש כינוי לטבלה
SELECT IF(CountCIty > 35, City, "כל הערים"), SUM(CountCIty) FROM ( SELECT City, Count(`id`) AS CountCIty FROM Contacts GROUP BY City ) as CountTable GROUP BY IF(CountCIty > 35, City, "כל הערים")
-
@yossiz אפשר אבל זה פעם אחרונה
בsql server א"א לעשות SELECT על שדות ללא פונקציית צבירה למעט אלו שצוינו מפורש בפיסוקית GROUP BY.
(זה אכן הגיוני אבל מרגיז)
כלומר יצטרכו לעשות ככה:SELECT MAX(IF(CountCIty > 15, City, "כל הערים")), SUM(CountCIty) FROM
הMAX פה לא באמת יעשה משהו שהרי אחרי הקיבוץ הכפול לא ייתכנו ערכים שונים באותה קבוצה והוא יחזיר את האחרון סתם.
אפשר גם להשתמש בOVER, אבל אני לא מכיר את זה עדיין (נו נו נו!). -
@dovid אמר בפילוח נתונים ב mySQL:
SELECT IF(CountCIty > 15, City, "כל הערים"), SUM(CountCIty) FROM ( SELECT City, Count(ID) AS CountCIty FROM Table GROUP BY City ) GROUP BY IF(CountCIty > 15, City, "כל הערים")
התחביר הזה ספציפית נכון רק לmySql. אבל הרעיון תמיד אפשרי.
אשמח לכיון על זה הדרך, אם יש לי רשימת ערים מוגדר מראש שאותם אני רוצה כשורה נפרדת וכל השאר מאוחדים.
איך עושים זאת?
תודה -
@dovid אמר בפילוח נתונים ב mySQL:
@חוקר הכיוון נשאר זהה. אם זו רשימה קצרה תוסיף בIF תנאי של IN. ואם זה ארוך אני מבין שזה בטבלה אז צריך לעשות LEFT JOIN לטבלה הזו.
זה בטבלה אחרת.
יש מצב להסבר? אני לא מבין איך אני יוצר את התנאי.
ולמען האמת הערך הדיפולטיבי נמצא בטבלה שלישית (אצל כל לקוח זה יוכל להתבטא אחרת).
יש מזהה פרוייקט שמאחד בין הנתונים בכל הטבלאות.
תודה