برنامه نویسی
توضیح (نیاز به) عبارات جدول مشترک SQL (CTE)

مورد استفاده
نگرانی مستند کردن استفاده از عبارات جدول متداول همانطور که به طور مکرر در Redash هنگام ایجاد پرس و جو / گزارش های نظارتی استفاده می شود. همچنین، من به ترتیب عملیات SQL برخورد کردم که یاد گرفتم که شما نمی توانید یک ستون مشتق شده را در همان عبارتی که در آن تعریف شده است فیلتر کنید.
1. CTE چیست
- یک CTE (Common Table Expression) است مجموعه نتایج موقت
- میتوانید به عبارت SELECT، INSERT، UPDATE یا DELETE دیگری ارجاع دهید
- یعنی می توانید آن را بسازید و در پرس و جوی بعدی استفاده کنید
- در پرس و جوهای پیچیده تر استفاده می شود
- آنها هستند عبارات، یعنی همیشه یک مقدار را برمی گردانند
2. نحو
3. منافع
- آسان برای یادگیری
- خوانایی کد
- query named اطلاعاتی در مورد نتایج پرس و جو به شما می دهد
- SQL قابل خواندن بعد از 2 ماه کمک بزرگی به دیگران و شما می کند
- مدولار بودن
- قابل کپی کردن، قابل استفاده مجدد
- CTE ها را می توان به هم چسباند
- با طرز فکر شما در مورد تجزیه و تحلیل داده ها بهتر مطابقت دارد
- عبارات جدول مشترک (CTE) اغلب برای کاهش پیچیدگی پرس و جوهای SQL استفاده می شود.
- گاهی اوقات، CTE ها فقط یک تکنیک بازسازی نیستند. اگر می خواهید روی یک ستون مشتق شده فیلتر کنید، آنها ضروری هستند.
گاهی اوقات، CTE یک ضرورت است – نه فقط یک تکنیک بازسازی
select player_name,
year,
case when year ='SR' then 'yes'
else null
end as "is_a_senior"
from benn.college_football_players
where is_a_senior = "yes"
- که یک خطا برمی گرداند
column "is_a_senior" does not exist
هنگام ارجاع به یک ستون مشتق شده درWHERE
بند - به این دلیل است که ترتیب پردازش پرس و جو SQL:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT/OFFSET
- را
WHERE
بند قبل از ارزیابی می شودSELECT
بند، باعث ایجاد نام مستعار ستون مشتق شده (is_a_senior
) در دسترس نباشدWHERE
بند - راه حل ساده با استفاده از عبارات جدول مشترک (CTE) (ممکن است موارد دیگری وجود داشته باشد) به شرح زیر است:
WITH player_data AS (
SELECT player_name,
year,
CASE WHEN year = 'SR' THEN 'yes'
ELSE null
END AS is_a_senior
FROM benn.college_football_players
)
SELECT player_name,
year,
is_a_senior
FROM player_data
WHERE is_a_senior = 'yes';
4. منابع
https://mode.com/sql-tutorial/sql-case