การใช้ CTE กับ Redshift

Introduction to Redshift

Jason Myers

Principal Architect

Common table expressions (CTEs)

  • ชุดผลลัพธ์ชั่วคราว
  • ทำให้คิวรีเรียบง่ายขึ้น
  • ทางเลือกแทน subquery
Introduction to Redshift

โครงสร้าง Subquery และ CTE

SELECT division_name,
       revenue_total
       -- Subquery for top 10 divions by revenue
  FROM (SELECT division_id,
               SUM(revenue) AS revenue_total
          FROM orders
         GROUP BY division_id
         ORDER BY revenue_total DESC
         LIMIT 10) top_ten_divisions_by_rev
 WHERE revenue_total > 100000; 
-- CTE for top 10 divions by revenue
WITH top_ten_divisions_by_rev AS (
  SELECT division_id,
         SUM(revenue) AS revenue_total
    FROM orders
   GROUP BY division_id
   ORDER BY revenue_total DESC
   LIMIT 10)

-- Main query SELECT division_id, revenue_total -- FROM our CTE FROM top_ten_divisions_by_rev WHERE revenue_total > 100000;
Introduction to Redshift

การใช้หลาย CTE

-- Top 10 divisions by revenue CTE
WITH top_ten_divisions_by_rev AS(
  SELECT division_id,
         SUM(revenue) AS revenue_total
    FROM orders
   GROUP BY division_id
   ORDER BY revenue_total DESC
   LIMIT 10),

-- Division ID and Name CTE division_names AS( SELECT id AS division_id, name AS division_name FROM divisions)
-- Main query
SELECT division_name,
       revenue_total
       -- FROM Top 10 CTE
  FROM top_ten_divisions_by_rev
  -- Joining so we can use the division name
  JOIN division_names USING (DIVISION_ID)
 WHERE revenue_total > 100000;
Introduction to Redshift

หลาย CTE และการ JOIN ระหว่าง CTE

```sql
-- Selecting the division names
WITH division_names AS(
  SELECT id AS division_id,
         name AS division_name
    FROM divisions),
-- Selecting the top ten divisions by revenue
top_ten_divisions_by_rev AS(
  SELECT division_name,
         SUM(revenue) AS revenue_total
    FROM orders
    -- Joining in the division_names CTE
    JOIN divisions USING (division_id)
   GROUP BY division_name
   ORDER BY revenue_total DESC
   LIMIT 10);

กฎของ Kernighan

ทุกคนรู้ดีว่าการดีบักยากกว่าการเขียนโปรแกรมถึงสองเท่า ดังนั้น ถ้าเขียนโค้ดได้ฉลาดที่สุดเท่าที่จะทำได้แล้ว จะดีบักมันได้อย่างไร?

Introduction to Redshift

ประสิทธิภาพของ CTE

  • ประสิทธิภาพเทียบเท่า subquery
  • ดีกว่า subquery เมื่อนำกลับมาใช้ซ้ำ

ลำดับโค้ด SQL กับลำดับการประมวลผล

Introduction to Redshift

มาฝึกกันเถอะ!

Introduction to Redshift

Preparing Video For Download...