דילוג לתוכן המרכזי
מודול 14 · שיעור 2 מתוך 354/57 בקורס~15 min
שיעורי מודול (2/3)

CTE מרובים ומשורשרים

CTEs מרובים ומשורשרים

האלגנטיות של ביטויים WITH באמת זורחת כאשר אתה משרשרת כמה יחד. אתה יכול להגדיר CTEs רבים ברצף, להפריד ביניהם עם פסיק.

והנה משהו שטהרנים חוזרים אוהבים: CTEs מאוחרים יותר יכולים לקרוא נתונים מ-CTEs קודמים, לפרק חישובים עוקבים חתיכה אחר חתיכה!

דוגמה למולטי-CTE

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
),
top_customers AS (
  SELECT * FROM premium_customers
  WHERE total_spent > 5000
)
SELECT c.first_name, tc.total_spent
FROM customers c
JOIN top_customers tc ON c.id = tc.customer_id;

זה תכנות בסגנון בלוק! כל בלוק עושה עבודה אחת בלבד.

פעילות גופנית#sql.m14.l2.e1
ניסיונות: 0טוען...

הגדר שני CTEs עוקבים: \n1) 'order_totals' מחשב את 'customer_id' ואת 'order_count' המבוצע באמצעות 'COUNT(*)' מ-'orders'.\n2) 'gold_users' קורא מ-'order_totals' מסנן לקוחות עם 'order_count >= 2'.\nב-'קודם קודמים' בטבלה 'קודם כל'. 'last_name') עם 'gold_users' (ON c.id = g.customer_id), והצג גם את ה-'order_count' שלהם.

טוען עורך...
הצג רמז

הפרד סיכומי הזמנה ומשתמשי זהב באמצעות פסיק (ללא שנייה WITH!)

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#sql.m14.l2.e2
ניסיונות: 0טוען...

כעת בוא נשתמש במספר CTEs כדי לפשט מדדים: צור 'max_price' (מחלץ שורה בודדת עם 'max_value' באמצעות 'MAX(unit_price)' מתוך 'order_items'). בשאילתה הראשית, חלץ כל 'מזהה_מוצר' ו'מחיר_יחידה' מתוך 'פריטים_הזמנה' והראה כמה זה שונה מהמחיר המקסימלי, תוך חישוב '(SELECT max_value FROM max_price) - unit_price AS difference'. אין הצטרפות - השתמש בשאילתת משנה ב-CTE כדי לקבל ערך יחיד!

טוען עורך...
הצג רמז

WITH max_price AS (...) SELECT product_id, unit_price, (SELECT max_value FROM max_price) - unit_price FROM order_items;

הפתרון זמין לאחר 3 ניסיונות