DROP TABLE IF EXISTS Sales_ag;
sales_ag (
CREATE TABLE
year INT,varchar(15),
category
amount INT
)
Sales_ag (year, category, amount) values (2000, 'Automotive', 89);
INSERT into Sales_ag (year, category, amount) values (2000, 'Computers', 59);
insert into Sales_ag (year, category, amount) values (2000, 'Books', 19);
insert into Sales_ag (year, category, amount) values (2000, 'Movies', 74);
insert into Sales_ag (year, category, amount) values (2000, 'Garden', 74);
insert into Sales_ag (year, category, amount) values (2001, 'Clothing', 49);
insert into Sales_ag (year, category, amount) values (2001, 'Computers', 53);
insert into Sales_ag (year, category, amount) values (2001, 'Automotive', 65);
insert into Sales_ag (year, category, amount) values (2001, 'Garden', 24);
insert into Sales_ag (year, category, amount) values (2001, 'Movies', 39); insert into
ברוכים הבאים לתרגיל השלישי!
האמת זו לא ממש שאלה שנדרשתי לה בעבודה אלא שאלה שעלתה בקבוצות פייסבוק לאנליסטים וראיתי כי איציק בן-גן דן בה גם בספר שלו על פונקציות חלון.
תכלס, ברוב המקרים תוכלו להשתמש בפונקצית חלון, אבל נראה לי זה תרגול מגניב שדורש מאיתנו לחשוב מה בפועל קורה בפונקצית דירוג ובכך לשחזר אותה.
שאלה
ללא שימוש בשום פונקצית חלון, צרו עמודה חדשה שמדרגת את השורות לפי מכירות (amount) באותה שנה (sale_year), בדומה לפונקצית DESNE_RANK()
. כלומר, בהינתן תיקו בהיררכיה, ערכים זהים יקבלו את אותו דירוג ואילו הערכים הבאים בסדר יקבלו דירוג אחד מעל הערך הקודם שהיה בתיקו.
בהצלחה!
נסו בעצמכם
אונליין
נסו בחלון טקסט למטה (SQLite):
-- EDIT THIS QUERY:
SELECT *
FROM sales_ag
LIMIT 10;
נסו על המחשב שלכם
הצג קוד ליצירת טבלה
תשובה
סרטון הסבר
הצג פתרון
SELECT *,
SELECT COUNT(DISTINCT SalesInner.amount) as rn
(FROM sales_ag SalesInner
WHERE SalesInner.year = SalesOuter.year
AND SalesInner.amount >= SalesOuter.amount) AS custom_dense_rank
FROM sales_ag SalesOuter
ORDER BY year, custom_dense_rank
custom_dense_rank | amount | category | sale_year |
---|---|---|---|
1 | 89 | Automotive | 2000 |
2 | 74 | Movies | 2000 |
2 | 74 | Garden | 2000 |
3 | 59 | Computers | 2000 |
4 | 19 | Books | 2000 |
1 | 65 | Automotive | 2001 |
2 | 53 | Computers | 2001 |
3 | 49 | Clothing | 2001 |
4 | 39 | Movies | 2001 |
5 | 24 | Garden | 2001 |