יישום נוסחאות בקוד

תרגום נוסחה סטטיסטית לקוד SQL

בסיסי
Published

December 12, 2023

ברוכים הבאים לתרגיל השישי!

הדאטה

התרגיל מורכב מטבלת פריטי כלי בית והסכום שבו הם נמכרו:

SELECT TOP 5 * 
FROM Items_q6
5 records
category amount
Chairs 12
Chairs 10
Chairs 10
Chairs 44
Chairs 93

שאלה 1

הינכם מתבקשים למדוד את מקדם השונות (Coefficient of Variation) של כל קטגוריה מפריטי הבית.

הנוסחה למדידת אותו מקדם היא כדלקמן:

\[ CV = \frac{\sigma}{\mu} \]

כלומר, חלוקת סטיית התקן של הקבוצה בממוצע שלה. יש למיין את הפלט בסדר יורד של ערכי ה-CV; קטגוריות עם ערך נמוך יותר יופיעו ראשונים וכן הלאה.

שאלה 2

התבקשם ‘לנרמל’ את עמודת הסכום בדאטה וליצור עמודה חדשה כך שכל הערכים המקוריים בכל קבוצה יהיו בטווח ערכים זהה של 0-100: הערך הכי גדול בכל קבוצה ימופה ל-100 ואילו הערך הקטן ביותר יהיה 0, וכך כל הערכים המקוריים ימופו לטווח הערכים ביניהם.

כדי לנרמל את עמודת ה-Amount, השתמשו בנוסחה הבאה:

\[ Z_i = \frac{X_i - min(x)}{max(x) - min(x)} * 100 \] כאשר:

  • \(Z_i\): זה הערך \(i\) המנורמל החדש

  • \(X_i\): הערך \(i\) שעובר נרמול

  • \(min(x)\): הערך המינימלי במערך \(X\)

  • \(max(x)\): הערך המקסימלי במערך \(X\)

שימו לב לבצע את הנרמול עבור כל קבוצה בנפרד.

נסו בעצמכם

אונליין

נסו בחלון טקסט למטה (SQLite):

-- EDIT THIS QUERY:
SELECT *
FROM Items_q6
LIMIT 10;

נסו על המחשב שלכם

הצג קוד ליצירת טבלה
DROP TABLE IF EXISTS ITEMS_Q6;


CREATE TABLE items_q6
    ([category] varchar(6), [amount] int)
;
    
INSERT INTO items_q6
    ([category], [amount])
VALUES
    ('Chairs', 12),
    ('Chairs', 10),
    ('Chairs', 10),
    ('Chairs', 44),
    ('Chairs', 93),
    ('Chairs', 93),
    ('Chairs', 32),
    ('Chairs', 99),
    ('Chairs', 95),
    ('Chairs', 98),
    ('Chairs', 85),
    ('Chairs', 1),
    ('Chairs', 39),
    ('Chairs', 95),
    ('Chairs', 91),
    ('Chairs', 15),
    ('Chairs', 38),
    ('Chairs', 47),
    ('Chairs', 31),
    ('Chairs', 20),
    ('Tables', 80),
    ('Tables', 602),
    ('Tables', 913),
    ('Tables', 694),
    ('Tables', 241),
    ('Tables', 981),
    ('Tables', 477),
    ('Tables', 187),
    ('Tables', 111),
    ('Tables', 603),
    ('Tables', 73),
    ('Tables', 47),
    ('Tables', 74),
    ('Tables', 37),
    ('Tables', 691),
    ('Tables', 93),
    ('Tables', 487),
    ('Tables', 873),
    ('Tables', 775),
    ('Tables', 4),
    ('Sofas', 146),
    ('Sofas', 431),
    ('Sofas', 330),
    ('Sofas', 161),
    ('Sofas', 308),
    ('Sofas', 437),
    ('Sofas', 97),
    ('Sofas', 55),
    ('Sofas', 383),
    ('Sofas', 422),
    ('Sofas', 127),
    ('Sofas', 331),
    ('Sofas', 213),
    ('Sofas', 29),
    ('Sofas', 260),
    ('Sofas', 244),
    ('Sofas', 398),
    ('Sofas', 497),
    ('Sofas', 276),
    ('Sofas', 397),
    ('Plates', 50),
    ('Plates', 6),
    ('Plates', 16),
    ('Plates', 29),
    ('Plates', 2),
    ('Plates', 6),
    ('Plates', 9),
    ('Plates', 20),
    ('Plates', 3),
    ('Plates', 48),
    ('Plates', 23),
    ('Plates', 27),
    ('Plates', 46),
    ('Plates', 18),
    ('Plates', 5),
    ('Plates', 12),
    ('Plates', 9),
    ('Plates', 15),
    ('Plates', 12),
    ('Plates', 14),
    ('Cups', 2),
    ('Cups', 10),
    ('Cups', 6),
    ('Cups', 4),
    ('Cups', 2),
    ('Cups', 4),
    ('Cups', 4),
    ('Cups', 5),
    ('Cups', 10),
    ('Cups', 4),
    ('Cups', 3),
    ('Cups', 6),
    ('Cups', 4),
    ('Cups', 6),
    ('Cups', 2),
    ('Cups', 4),
    ('Cups', 2),
    ('Cups', 9),
    ('Cups', 7),
    ('Cups', 1)
;

תשובות

סרטון הסבר

תשובה 1

הצג פתרון

שימו לב כי הפתרון מותאם ל-T-SQL ולא יעבוד כמו שהוא בתיבת SQL למעלה.

SELECT category,
    STDEV(AMOUNT) / AVG(AMOUNT) AS CV
FROM items_q6
GROUP BY CATEGORY
ORDER BY CV;
5 records
category CV
Sofas 0.5020680
Cups 0.6633002
Chairs 0.7032536
Plates 0.8195745
Tables 0.8481626

תשובה 2

הצג פתרון
SELECT category,
    amount,
    amount_noramlized = (AMOUNT - MIN(AMOUNT) OVER (PARTITION BY category)) * 100.0 / 
                        (MAX(AMOUNT) OVER (PARTITION BY category) - MIN(AMOUNT) OVER (PARTITION BY category))
FROM items_q6
order by category, amount_noramlized
Displaying records 1 - 10
category amount amount_noramlized
Chairs 1 0.000000
Chairs 10 9.183673
Chairs 10 9.183673
Chairs 12 11.224490
Chairs 15 14.285714
Chairs 20 19.387755
Chairs 31 30.612245
Chairs 32 31.632653
Chairs 38 37.755102
Chairs 39 38.775510