SQL āļāļąāđāļāļŠāļđāļāļŠāļģāļŦāļĢāļąāļāļŠāļąāļĄāļ āļēāļĐāļāđ Data Analyst: Subquery, Pivot āđāļĨāļ°āļāļēāļĢāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ Query 2026
āļāļđāđāļĄāļ·āļ SQL āļāļąāđāļāļŠāļđāļāļŠāļģāļŦāļĢāļąāļāđāļāļĢāļĩāļĒāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ Data Analyst 2026: correlated subquery, pivot query āļāđāļ§āļĒ conditional aggregation, EXPLAIN ANALYZE, āļāļĨāļĒāļļāļāļāđ indexing āđāļĨāļ° anti-pattern āļāļĩāđāļāđāļāļāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļ

āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāđāļāļāļģāđāļŦāļāđāļ Data Analyst āđāļāļāļąāļāļāļļāļāļąāļāđāļĄāđāđāļāđāļ§āļąāļāđāļāļĩāļĒāļāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāđāļāļĩāļĒāļ SELECT āļāļ·āđāļāļāļēāļāđāļāđāļēāļāļąāđāļ āđāļāđāļĒāļąāļāļāđāļāļāļāļēāļĢāļāļąāļāļĐāļ° SQL āļāļąāđāļāļŠāļđāļāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāļąāļāļāļēāļĢāļāļąāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļąāļāļāđāļāļ āļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļāļ Query āđāļĨāļ°āļāļāļāđāļāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļēāļāļāđāļāļĄāļđāļĨāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāđāļāđ āļāļđāđāļŠāļĄāļąāļāļĢāļāļĩāđāđāļāđāļēāđāļāđāļāļāļāļīāļāļāļĒāđāļēāļ Correlated Subquery, Pivot Query, EXPLAIN Plan āđāļĨāļ° Indexing Strategy āļāļ°āļĄāļĩāļāļ§āļēāļĄāđāļāđāđāļāļĢāļĩāļĒāļāļāļĒāđāļēāļāļāļąāļāđāļāļāđāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļąāļāđāļĨāļ·āļāļ āļāļāļāļ§āļēāļĄāļāļĩāđāļĢāļ§āļāļĢāļ§āļĄāļŦāļąāļ§āļāđāļ SQL āļāļąāđāļāļŠāļđāļāļāļĩāđāļāļāļāđāļāļĒāļāļĩāđāļŠāļļāļāđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļģāđāļŦāļāđāļ Data Analyst āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļāļĩāđāļāļģāđāļāđāļāđāļāļēāļāđāļāđāļāļĢāļīāļ
āđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ āļāļđāđāļŠāļąāļĄāļ āļēāļĐāļāđāļĄāļąāļāđāļĄāđāđāļāđāļāđāļāļāļāļēāļĢāđāļāļĩāļĒāļāļāļģāļāļāļāļāļĩāđāļāļđāļāļāđāļāļ āđāļāđāļāđāļāļāļāļēāļĢāđāļŦāđāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļīāļāļāđāļ§āļĒ āļāļēāļĢāļāļāļīāļāļēāļĒāļ§āđāļēāđāļŦāļāļļāđāļāļāļķāļāđāļĨāļ·āļāļāđāļāđ CTE āđāļāļ Correlated Subquery āļŦāļĢāļ·āļāđāļŦāļāļļāđāļ EXISTS āļāļķāļāđāļŦāļĄāļēāļ°āļŠāļĄāļāļ§āđāļē IN āđāļāļāļēāļāļŠāļāļēāļāļāļēāļĢāļāđ āļāļ°āļāđāļ§āļĒāđāļŠāļāļāļāļķāļāļāļ§āļēāļĄāđāļāđāļēāđāļāđāļāļīāļāļĨāļķāļāļāļĩāđāļāļģāđāļŦāđāđāļāļāđāļāđāļāļāļēāļāļāļđāđāļŠāļĄāļąāļāļĢāļāļāļāļ·āđāļ
Correlated Subquery āļāļąāļ Regular Subquery: āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļĩāđāļŠāļģāļāļąāļ
Regular Subquery āļāļ·āļ Subquery āļāļĩāđāļāļģāļāļēāļāļāļīāļŠāļĢāļ°āļāļēāļ Query āļŦāļĨāļąāļ āđāļāļĒāļāļ°āļāļđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļĩāļĒāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§āđāļĨāđāļ§āļāļģāļāļĨāļĨāļąāļāļāđāđāļāđāļāđāļāļąāļ Query āļ āļēāļĒāļāļāļ āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āļāļēāļĢāļŦāļēāļāļģāļŠāļąāđāļāļāļ·āđāļāļāļĩāđāļĄāļĩāļĄāļđāļĨāļāđāļēāļŠāļđāļāļāļ§āđāļēāļāđāļēāđāļāļĨāļĩāđāļĒāļāļāļāļāļąāđāļāļŦāļĄāļ
-- regular_subquery_threshold.sql
-- Find all orders above the average order value
SELECT
order_id,
customer_id,
total_amount
FROM orders
WHERE total_amount > (
-- Executes once, returns a single scalar value
SELECT AVG(total_amount)
FROM orders
);āđāļāļāļēāļāļāļĢāļāļāļąāļāļāđāļēāļĄ Correlated Subquery āļāļ°āļāđāļēāļāļāļīāļāļāđāļāļĄāļđāļĨāļāļēāļ Query āļ āļēāļĒāļāļāļ āļāļģāđāļŦāđāļāđāļāļāļāļđāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļģāļāļļāļāļāļĢāļąāđāļāļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļ§āļāļāļ Query āļŦāļĨāļąāļ āļŠāļīāđāļāļāļĩāđāļŠāđāļāļāļĨāļāđāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļĒāđāļēāļāļĄāļēāļāđāļĄāļ·āđāļāļāļģāļāļēāļāļāļąāļāļāđāļāļĄāļđāļĨāļāļģāļāļ§āļāļĄāļēāļ āļāļąāļ§āļāļĒāđāļēāļāļāđāļāđāļāļāļĩāđāđāļŠāļāļāļāļēāļĢāļāđāļāļŦāļēāļāļāļąāļāļāļēāļāļāļĩāđāļĄāļĩāđāļāļīāļāđāļāļ·āļāļāļŠāļđāļāļāļ§āđāļēāļāđāļēāđāļāļĨāļĩāđāļĒāļāļāļāđāļāļāļāļāļāđāļāļ
-- correlated_subquery_department.sql
-- Employees earning above their department average
SELECT
e.employee_id,
e.name,
e.department,
e.salary
FROM employees e
WHERE e.salary > (
-- Re-evaluated for each employee's department
SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.department = e.department
);āļ§āļīāļāļĩāļāļĩāđāļāļĩāļāļ§āđāļēāļŠāļģāļŦāļĢāļąāļ Query āļāđāļēāļāļāđāļāļāļ·āļāļāļēāļĢāđāļāđ Common Table Expression (CTE) āđāļāļ·āđāļāļāļģāļāļ§āļāļāđāļēāđāļāļĨāļĩāđāļĒāļāļāļāđāļāđāļĨāļ°āđāļāļāļāđāļāļĩāļĒāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§ āđāļĨāđāļ§āļāļķāļ JOIN āļāļĨāļąāļāļĄāļēāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ āļ§āļīāļāļĩāļāļĩāđāļĨāļāļāļģāļāļ§āļāļāļēāļĢāļŠāđāļāļāļāļēāļĢāļēāļāļĨāļāļāļĒāđāļēāļāļĄāļēāļ
-- optimized_with_cte.sql
-- Same result, single pass over the data
WITH dept_avg AS (
SELECT
department,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department
)
SELECT
e.employee_id,
e.name,
e.department,
e.salary
FROM employees e
JOIN dept_avg d ON e.department = d.department
WHERE e.salary > d.avg_salary;āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļāļēāļ Correlated Subquery āđāļāđāļ CTE + JOIN āđāļāđāļāđāļāļāļāļīāļāļāļĩāđāļāļđāđāļŠāļąāļĄāļ āļēāļĐāļāđāļĄāļąāļāļāđāļāļāļāļēāļĢāđāļŦāđāļ āđāļāļĢāļēāļ°āđāļŠāļāļāđāļŦāđāđāļŦāđāļāļ§āđāļēāļāļđāđāļŠāļĄāļąāļāļĢāļāļģāļāļķāļāļāļķāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļāļ Query āđāļĄāđāđāļāđāđāļāļĩāļĒāļāđāļāđāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļāļāļĨāļĨāļąāļāļāđ
Subquery Patterns āļāļĩāđāļāđāļāļāļĢāļđāđ
EXISTS āļāļąāļ IN: āđāļĨāļ·āļāļāđāļāđāļāļĒāđāļēāļāđāļĢ
āļŦāļāļķāđāļāđāļāļāļģāļāļēāļĄāļāļĩāđāļāļāļāđāļāļĒāđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļ·āļāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ EXISTS āļāļąāļ IN āđāļĄāļ·āđāļāđāļāđāļāļąāļ Subquery āđāļāđāļāđāļāļāļāļāļĨāļĨāļąāļāļāđ āļāļąāđāļāļŠāļāļāđāļŦāđāļāļģāļāļāļāđāļāļĩāļĒāļ§āļāļąāļ āđāļāđāđāļāđāļāđāļāļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļąāđāļāđāļāļāļāđāļēāļāļāļąāļāļāļĒāđāļēāļāļĄāļĩāļāļąāļĒāļŠāļģāļāļąāļ āđāļāļĒāđāļāļāļēāļ°āđāļĄāļ·āđāļ Subquery āļŠāđāļāļāļ·āļāļāđāļāļĄāļđāļĨāļāļģāļāļ§āļāļĄāļēāļ EXISTS āļāļ°āļŦāļĒāļļāļāļāļģāļāļēāļāļāļąāļāļāļĩāđāļĄāļ·āđāļāļāļāđāļāļ§āđāļĢāļāļāļĩāđāļāļĢāļāđāļāļ·āđāļāļāđāļ āđāļāļāļāļ°āļāļĩāđ IN āļāđāļāļāļāļĢāļ°āļĄāļ§āļĨāļāļĨ Subquery āļāļąāđāļāļŦāļĄāļāļāđāļāļ
-- exists_vs_in.sql
-- Customers who placed at least one order in 2026 (EXISTS â preferred)
SELECT c.customer_id, c.name
FROM customers c
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.customer_id = c.customer_id
AND o.order_date >= '2026-01-01'
);
-- Equivalent with IN (slower on large datasets)
SELECT customer_id, name
FROM customers
WHERE customer_id IN (
SELECT customer_id
FROM orders
WHERE order_date >= '2026-01-01'
);Scalar Subquery āđāļ SELECT
āļāļĩāļāļĢāļđāļāđāļāļāļŦāļāļķāđāļāļāļĩāđāļāļ§āļĢāļĢāļđāđāļāļąāļāļāļ·āļ Scalar Subquery āđāļ SELECT clause āļāļķāđāļāļŠāđāļāļāļ·āļāļāđāļēāđāļāļĩāļĒāļ§āļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āđāļāļ§ āļ§āļīāļāļĩāļāļĩāđāļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāđāļĄāļ·āđāļāļāđāļāļāļāļēāļĢāđāļŠāļāļāļāđāļāļĄāļđāļĨāļĢāļ§āļĄ (Aggregated Data) āļāļ§āļāļāļđāđāļāļąāļāļāđāļāļĄāļđāļĨāļĢāļēāļĒāļāļļāļāļāļĨ āđāļāđāļāļ§āļĢāļĢāļ°āļĄāļąāļāļĢāļ°āļ§āļąāļāđāļĢāļ·āđāļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāļĢāļēāļ°āļāļģāļāļēāļāļāļĨāđāļēāļĒ Correlated Subquery
-- scalar_subquery_select.sql
-- Each product with its category's total revenue
SELECT
p.product_id,
p.product_name,
p.category,
(
SELECT SUM(oi.quantity * oi.unit_price)
FROM order_items oi
JOIN products p2 ON oi.product_id = p2.product_id
WHERE p2.category = p.category
) AS category_total_revenue
FROM products p;āļŠāļģāļŦāļĢāļąāļāļāļĢāļāļĩāļāļĩāđ āđāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĢāļīāļāļāļ§āļĢāļāļīāļāļēāļĢāļāļēāđāļāđ Window Function āļŦāļĢāļ·āļ CTE āđāļāļāđāļāļ·āđāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļĩāđāļāļĩāļāļ§āđāļē āļāļēāļĢāđāļāđāļēāđāļāļāļąāđāļāļ§āļīāļāļĩāļāļĩāđāđāļāđāļāļēāļāđāļāđāđāļĨāļ°āļ§āļīāļāļĩāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļĩāđāļŠāļļāļāđāļāđāļāļŠāļīāđāļāļāļĩāđāļāļđāđāļŠāļąāļĄāļ āļēāļĐāļāđāđāļŦāđāļāļ§āļēāļĄāļŠāļģāļāļąāļ
Pivot Query āļāđāļ§āļĒ Conditional Aggregation
Pivot Query āđāļāđāļāđāļāļāļāļīāļāļāļĩāđ Data Analyst āļāđāļāļāđāļāđāļāđāļāļĒāļĄāļēāļ āđāļāļĢāļēāļ°āļāļēāļĢāđāļāļĨāļāļāđāļāļĄāļđāļĨāļāļēāļāđāļāļ§āđāļāđāļāļāļāļĨāļąāļĄāļāđ (Row to Column) āļāđāļ§āļĒāđāļŦāđāļāđāļāļĄāļđāļĨāļāđāļēāļāļāđāļēāļĒāļāļķāđāļāđāļĨāļ°āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāđāļŠāļāļāđāļāļĢāļēāļĒāļāļēāļ āļ§āļīāļāļĩāļāļĩāđāļāļīāļĒāļĄāļāļĩāđāļŠāļļāļāļāļ·āļāļāļēāļĢāđāļāđ CASE āļĢāđāļ§āļĄāļāļąāļ Aggregate Function
āļāļąāļ§āļāļĒāđāļēāļāļāđāļāđāļāļāļĩāđāđāļŠāļāļāļāļēāļĢāļŠāļĢāđāļēāļāļĢāļēāļĒāļāļēāļāļĢāļēāļĒāđāļāđāļĢāļēāļĒāđāļāļ·āļāļāļāļāļāđāļāđāļĨāļ°āļāļĨāļīāļāļ āļąāļāļāđ āđāļāļĒāđāļāļĨāļāđāļāļ·āļāļāļāļēāļāđāļāļ§āđāļāđāļāļāļāļĨāļąāļĄāļāđ
-- pivot_monthly_revenue.sql
-- Monthly revenue pivot: one row per product, one column per month
SELECT
product_id,
product_name,
SUM(CASE WHEN EXTRACT(MONTH FROM order_date) = 1
THEN quantity * unit_price ELSE 0 END) AS jan_revenue,
SUM(CASE WHEN EXTRACT(MONTH FROM order_date) = 2
THEN quantity * unit_price ELSE 0 END) AS feb_revenue,
SUM(CASE WHEN EXTRACT(MONTH FROM order_date) = 3
THEN quantity * unit_price ELSE 0 END) AS mar_revenue,
SUM(CASE WHEN EXTRACT(MONTH FROM order_date) = 4
THEN quantity * unit_price ELSE 0 END) AS apr_revenue,
-- Repeat for remaining months
SUM(quantity * unit_price) AS total_revenue
FROM order_items oi
JOIN orders o ON oi.order_id = o.order_id
JOIN products p ON oi.product_id = p.product_id
WHERE o.order_date >= '2026-01-01'
GROUP BY product_id, product_name
ORDER BY total_revenue DESC;āļāļĩāļāļāļąāļ§āļāļĒāđāļēāļāļŦāļāļķāđāļāļāļĩāđāļāļāļāđāļāļĒāđāļāļāļēāļ Data Analyst āļāļ·āļāļāļēāļĢāļ§āļīāđāļāļĢāļēāļ°āļŦāđāļāļĪāļāļīāļāļĢāļĢāļĄāļāļđāđāđāļāđāļāļēāļĄāļāļĢāļ°āđāļ āļāļāļļāļāļāļĢāļāđ Query āļāđāļēāļāļĨāđāļēāļāđāļŠāļāļāļāļēāļĢāļāļąāļāļāļģāļāļ§āļ Session āļāļēāļĄāļāļĢāļ°āđāļ āļāļāļļāļāļāļĢāļāđāđāļĨāļ°āļāļģāļāļ§āļāļŠāļąāļāļŠāđāļ§āļāļāļāļ Mobile
-- pivot_user_activity.sql
-- User activity: sessions by day of week and device type
SELECT
user_id,
COUNT(CASE WHEN device_type = 'mobile' THEN 1 END) AS mobile_sessions,
COUNT(CASE WHEN device_type = 'desktop' THEN 1 END) AS desktop_sessions,
COUNT(CASE WHEN device_type = 'tablet' THEN 1 END) AS tablet_sessions,
ROUND(
COUNT(CASE WHEN device_type = 'mobile' THEN 1 END) * 100.0 / COUNT(*),
1
) AS mobile_pct
FROM user_sessions
WHERE session_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
HAVING COUNT(*) >= 5 -- Only users with meaningful activity
ORDER BY mobile_pct DESC;Dynamic Pivot āļāđāļ§āļĒ CROSSTAB
āļŠāļģāļŦāļĢāļąāļāļāļđāđāļāļĩāđāđāļāđ PostgreSQL āļāļąāļāļāđāļāļąāļ CROSSTAB āļāļēāļ Extension tablefunc āđāļāđāļāļāļĩāļāļāļēāļāđāļĨāļ·āļāļāļŦāļāļķāđāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļ Pivot Table āđāļāļĒāđāļāļāļēāļ°āđāļĄāļ·āđāļāļāđāļāļāļāļēāļĢāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĩāđāļāļąāļāđāļāļāđāļĨāļ°āļāđāļēāļāļāđāļēāļĒāļāļ§āđāļēāļāļēāļĢāđāļāđ CASE āļŦāļĨāļēāļĒāļāļĢāļĢāļāļąāļ
-- crosstab_dynamic_pivot.sql
-- Enable the extension (once per database)
CREATE EXTENSION IF NOT EXISTS tablefunc;
-- Revenue by product and quarter using CROSSTAB
SELECT *
FROM crosstab(
$$
SELECT
product_name,
'Q' || EXTRACT(QUARTER FROM order_date)::TEXT AS quarter,
SUM(quantity * unit_price) AS revenue
FROM order_items oi
JOIN orders o ON oi.order_id = o.order_id
JOIN products p ON oi.product_id = p.product_id
WHERE EXTRACT(YEAR FROM o.order_date) = 2026
GROUP BY product_name, quarter
ORDER BY product_name, quarter
$$,
$$ VALUES ('Q1'), ('Q2'), ('Q3'), ('Q4') $$
) AS pivot_table(
product_name TEXT,
q1_revenue NUMERIC,
q2_revenue NUMERIC,
q3_revenue NUMERIC,
q4_revenue NUMERIC
);āļāđāļāļāļ§āļĢāļāļĢāļēāļāļāļ·āļ CROSSTAB āđāļāđāļāļāļĩāđāļāļāļĢāđāđāļāļāļēāļ°āļāļāļ PostgreSQL āđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļ MySQL āļŦāļĢāļ·āļ SQL Server āđāļāđāđāļāļĒāļāļĢāļ āđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ āļāļ§āļĢāļĢāļ°āļāļļāđāļŦāđāļāļąāļāđāļāļāļ§āđāļēāļāļģāļĨāļąāļāđāļāđāļāļĩāđāļāļāļĢāđāđāļāļāļēāļ°āļāļāļ Database āđāļ āđāļāļĢāļēāļ°āđāļŠāļāļāđāļŦāđāđāļŦāđāļāļāļķāļāļāļ§āļēāļĄāđāļāđāļēāđāļāđāļāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ Database Engine āļāđāļēāļ āđ
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Data Analytics āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
EXPLAIN Plan āđāļĨāļ° Cost Analysis
āļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāđāļāļāļēāļĢāļāđāļēāļāđāļĨāļ°āļ§āļīāđāļāļĢāļēāļ°āļŦāđ EXPLAIN Plan āļāļ·āļāđāļāđāļāļāļąāļāļĐāļ°āļāļĩāđāđāļĒāļāļĢāļ°āļŦāļ§āđāļēāļ Data Analyst āļāļąāđāļ§āđāļāļāļąāļ Data Analyst āļāļąāđāļāļŠāļđāļāđāļāđāļāļĒāđāļēāļāļāļąāļāđāļāļ āļāļģāļŠāļąāđāļ EXPLAIN ANALYZE āļāļ°āđāļŠāļāļāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļĢāļīāļāļāļāļ Query āļĢāļ§āļĄāļāļķāļāđāļ§āļĨāļēāļāļĩāđāđāļāđāđāļāđāļāđāļĨāļ°āļāļąāđāļāļāļāļāđāļĨāļ°āļāļģāļāļ§āļ Buffer āļāļĩāđāļāđāļēāļ
-- explain_analyze_example.sql
-- Analyze a slow query to identify bottlenecks
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT
c.customer_id,
c.name,
COUNT(o.order_id) AS order_count,
SUM(o.total_amount) AS lifetime_value
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_date >= '2025-01-01'
GROUP BY c.customer_id, c.name
HAVING SUM(o.total_amount) > 1000
ORDER BY lifetime_value DESC;āđāļĄāļ·āđāļāļāđāļēāļāļāļĨāļĨāļąāļāļāđāļāļāļ EXPLAIN ANALYZE āļĄāļĩāļāļļāļāļŠāļģāļāļąāļāļāļĩāđāļāđāļāļāļŠāļąāļāđāļāļāļāļąāļāļāļĩāđ
- Seq Scan vs Index Scan: Seq Scan āļāļāļāļēāļĢāļēāļāļāļāļēāļāđāļŦāļāđāļĄāļąāļāđāļāđāļāļŠāļąāļāļāļēāļāļāļāļ Query āļāļĩāđāļāđāļē āļāļ§āļĢāļāļĢāļ§āļāļŠāļāļāļ§āđāļēāļĄāļĩ Index āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļŦāļĢāļ·āļāđāļĄāđ
- Actual Time: āđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāđāļ§āļĨāļēāļāļĢāļīāļāļāļąāļ Estimated Cost āđāļāļ·āđāļāļāļđāļ§āđāļē Planner āļāļĢāļ°āđāļĄāļīāļāđāļāđāđāļĄāđāļāļĒāļģāļŦāļĢāļ·āļāđāļĄāđ
- Rows: āļāļģāļāļ§āļāđāļāļ§āļāļĢāļīāļāļāļĩāđāļāļĢāļ°āļĄāļ§āļĨāļāļĨāđāļāļĩāļĒāļāļāļąāļāļāļĩāđ Planner āļāļēāļāļāļēāļĢāļāđ āļāđāļēāļāđāļēāļāļāļąāļāļĄāļēāļāļāļēāļāļāđāļāļāļāļąāļāđāļāļ Statistics
- Buffers: āļāļģāļāļ§āļ Shared Hit (āļāđāļēāļāļāļēāļ Cache) āđāļāļĩāļĒāļāļāļąāļ Shared Read (āļāđāļēāļāļāļēāļ Disk) āļĒāļīāđāļāļĄāļĩ Hit āļĄāļēāļāļĒāļīāđāļāļāļĩ
- Sort Method: āļāļĢāļ§āļāļŠāļāļāļ§āđāļēāđāļāđāļ In-Memory Sort āļŦāļĢāļ·āļ Disk Sort āđāļāļĢāļēāļ° Disk Sort āļāđāļēāļāļ§āđāļēāļĄāļēāļ
Indexing Strategies āļŠāļģāļŦāļĢāļąāļ Query āļāļĩāđāđāļāđāļāđāļāļĒ
āļŦāļĨāļąāļāļāļēāļāļĢāļ°āļāļļ Bottleneck āļāļēāļ EXPLAIN Plan āđāļĨāđāļ§ āļāļąāđāļāļāļāļāļāļąāļāđāļāļāļ·āļāļāļēāļĢāļŠāļĢāđāļēāļ Index āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄ āļāļēāļĢāļāļāļāđāļāļ Index āļāļĩāđāļāļĩāļŠāļēāļĄāļēāļĢāļāđāļāļĨāļĩāđāļĒāļ Query āļāļĩāđāđāļāđāđāļ§āļĨāļēāļŦāļĨāļēāļĒāļ§āļīāļāļēāļāļĩāđāļŦāđāđāļŦāļĨāļ·āļāđāļāļĩāļĒāļāđāļĄāđāļāļĩāđāļĄāļīāļĨāļĨāļīāļ§āļīāļāļēāļāļĩ
-- indexing_strategies.sql
-- Index on order_date: filters a small percentage of rows
CREATE INDEX idx_orders_date ON orders (order_date);
-- Composite index for queries filtering on both columns
CREATE INDEX idx_orders_customer_date
ON orders (customer_id, order_date);
-- Covering index: includes columns needed in SELECT
-- Enables Index Only Scan (no table access)
CREATE INDEX idx_orders_covering
ON orders (customer_id, order_date)
INCLUDE (total_amount, status);āļŠāļīāđāļāļŠāļģāļāļąāļāļāļĩāđāļāđāļāļāđāļāđāļēāđāļāđāļāļĩāđāļĒāļ§āļāļąāļ Composite Index āļāļ·āļ āļĨāļģāļāļąāļāļāļāļāļāļāļĨāļąāļĄāļāđāļĄāļĩāļāļ§āļēāļĄāļŠāļģāļāļąāļāļĄāļēāļ Index (customer_id, order_date) āļāļ°āļāļđāļāđāļāđāđāļĄāļ·āđāļāļāļĢāļāļāļāđāļ§āļĒ customer_id āļāļĒāđāļēāļāđāļāļĩāļĒāļ§ āļŦāļĢāļ·āļāļāļĢāļāļāļāđāļ§āļĒāļāļąāđāļ customer_id āđāļĨāļ° order_date āđāļāđāļāļ°āđāļĄāđāļāļđāļāđāļāđāđāļĄāļ·āđāļāļāļĢāļāļāļāđāļ§āļĒ order_date āļāļĒāđāļēāļāđāļāļĩāļĒāļ§ āđāļŦāđāļāļķāļāļāļķāļāļŦāļĨāļąāļ "Leftmost Prefix" āđāļŠāļĄāļ
Partial Index: Index āđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļĩāđāļāđāļāļāļāļēāļĢ
Partial Index āļāļ·āļ Index āļāļĩāđāļŠāļĢāđāļēāļāđāļāļāļēāļ°āļāļēāļāļŠāđāļ§āļāļāļāļāļāļēāļĢāļēāļ āđāļāļĒāđāļāđāđāļāļ·āđāļāļāđāļ WHERE āđāļāļāļēāļĢāļāļģāļŦāļāļāļāļāļāđāļāļ āļ§āļīāļāļĩāļāļĩāđāļāļģāđāļŦāđ Index āļĄāļĩāļāļāļēāļāđāļĨāđāļāļĨāļ āđāļāđāļāļ·āđāļāļāļĩāđāļāđāļāļĒāļĨāļ āđāļĨāļ°āļāđāļāļŦāļēāđāļāđāđāļĢāđāļ§āļāļķāđāļ
-- partial_index.sql
-- Only index active orders (smaller, faster index)
CREATE INDEX idx_orders_active
ON orders (customer_id, order_date)
WHERE status = 'active';
-- Only index recent data for dashboard queries
CREATE INDEX idx_orders_recent
ON orders (order_date)
WHERE order_date >= '2026-01-01';Partial Index āđāļŦāļĄāļēāļ°āļāļĒāđāļēāļāļĒāļīāđāļāļŠāļģāļŦāļĢāļąāļāļāļĢāļāļĩāļāļĩāđ Query āļŠāđāļ§āļāđāļŦāļāđāđāļāđāļēāļāļķāļāđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļēāļāļŠāđāļ§āļāđāļāđāļēāļāļąāđāļ āđāļāđāļ Dashboard āļāļĩāđāđāļŠāļāļāđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļąāļāļāļļāļāļąāļ āļŦāļĢāļ·āļāļĢāļ°āļāļāļāļĩāđāļāđāļāļāļāđāļāļŦāļēāđāļāļāļēāļ°āļĢāļēāļĒāļāļēāļĢāļāļĩāđāļĒāļąāļāļāļģāđāļāļīāļāļāļēāļĢāļāļĒāļđāđ
āļŦāļāļķāđāļāđāļāļāđāļāļāļīāļāļāļĨāļēāļāļāļĩāđāļāļāļāđāļāļĒāļāļĩāđāļŠāļļāļāļāļ·āļāļāļēāļĢāđāļāđāļāļąāļāļāđāļāļąāļāļāļąāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāļĄāļĩ Index āļāļķāđāļāļāļ°āļāļģāđāļŦāđ Database āđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāđ Index āđāļāđāđāļĨāļĒ āļāđāļāļāļāļģ Seq Scan āđāļāļ āļāļĢāļ§āļāļŠāļāļ Query āļāļąāđāļāļŦāļĄāļāđāļŦāđāđāļāđāđāļāļ§āđāļēāđāļĄāđāļĄāļĩāļāļēāļĢāļŦāđāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāļĄāļĩ Index āļāđāļ§āļĒāļāļąāļāļāđāļāļąāļ
Query Anti-Patterns āļāļĩāđāļāđāļāļāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļ
āļāļēāļĢāđāļāđāļāļąāļāļāđāļāļąāļāļāļąāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāļĄāļĩ Index
āļāđāļāļāļīāļāļāļĨāļēāļāļāļĩāđāđāļāļīāļāļāļķāđāļāļāđāļāļĒāļĄāļēāļāđāļāļāļēāļĢāđāļāļĩāļĒāļ Query āļāļĢāļāļāļāđāļāļĄāļđāļĨāļāļēāļĄāļ§āļąāļāļāļĩāđ āļāļēāļĢāđāļāđ EXTRACT āļŦāļĢāļ·āļāļāļąāļāļāđāļāļąāļāļāļ·āđāļ āđ āļāļąāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāļĄāļĩ Index āļāļ°āļāļģāđāļŦāđ Database āļāđāļāļāļāļģāļāļ§āļāļāđāļēāļāļāļāļāļļāļāđāļāļ§āļāđāļāļāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ āļŠāđāļāļāļĨāđāļŦāđ Index āđāļĄāđāļāļđāļāđāļāđāļāļēāļ
-- anti_patterns.sql
-- BAD: function on indexed column disables the index
SELECT * FROM orders
WHERE EXTRACT(YEAR FROM order_date) = 2026;
-- GOOD: range comparison uses the index
SELECT * FROM orders
WHERE order_date >= '2026-01-01'
AND order_date < '2027-01-01';āļāļąāļāļāļąāļ NOT IN āļāļąāļ NULL
āļāļĩāļāļŦāļāļķāđāļ Anti-Pattern āļāļĩāđāļāļąāļāļāļĢāļēāļĒāļĄāļēāļāļāļ·āļāļāļēāļĢāđāļāđ NOT IN āļāļąāļ Subquery āļāļĩāđāļāļēāļāļĄāļĩāļāđāļē NULL āđāļāļ·āđāļāļāļāļēāļāļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāđāļ āđ āļāļąāļ NULL āđāļ SQL āļāļ°āđāļāđāļāļĨāļĨāļąāļāļāđāđāļāđāļ UNKNOWN āđāļĄāđāđāļāđ TRUE āļŦāļĢāļ·āļ FALSE āļāļąāļāļāļąāđāļ āļŦāļēāļāļĄāļĩāļāđāļē NULL āđāļĄāđāđāļāđāļāđāļēāđāļāļĩāļĒāļ§āđāļ Subquery āļāļĨāļĨāļąāļāļāđāļāļāļ NOT IN āļāļ°āđāļāđāļāļāļļāļāļ§āđāļēāļāđāļŠāļĄāļ
-- not_in_null_trap.sql
-- BAD: returns empty if any customer_id is NULL in subquery
SELECT * FROM customers
WHERE customer_id NOT IN (
SELECT customer_id FROM orders
);
-- GOOD: NOT EXISTS handles NULLs correctly
SELECT * FROM customers c
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.customer_id = c.customer_id
);āđāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ āļāļēāļĢāļĢāļđāđāļāļąāļ Anti-Pattern āđāļŦāļĨāđāļēāļāļĩāđāđāļĨāļ°āļāļāļīāļāļēāļĒāđāļāđāļ§āđāļēāđāļŦāļāļļāđāļāļāļķāļāđāļāđāļāļāļąāļāļŦāļēāļāļ°āļāđāļ§āļĒāļŠāļĢāđāļēāļāļāļ§āļēāļĄāļāđāļēāđāļāļ·āđāļāļāļ·āļāđāļāđāļāļĒāđāļēāļāļĄāļēāļ āđāļāļĢāļēāļ°āđāļŠāļāļāđāļŦāđāđāļŦāđāļāļ§āđāļēāļāļđāđāļŠāļĄāļąāļāļĢāļĄāļĩāļāļĢāļ°āļŠāļāļāļēāļĢāļāđāļāļĢāļīāļāđāļāļāļēāļĢāļāļģāļāļēāļāļāļąāļāļāđāļāļĄāļđāļĨ
āļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļąāļ§āļāļĩāđāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļĩāđāļŠāļļāļāļāļ·āļāļāļēāļĢāļāļķāļāđāļāļĩāļĒāļ Query āļāļĢāļīāļāļāļąāļāļāđāļāļĄāļđāļĨāļāļĢāļīāļ āļĨāļāļāļŠāļĢāđāļēāļāļāļēāļāļāđāļāļĄāļđāļĨāļāļāļŠāļāļ āļŠāļĢāđāļēāļ Index āđāļĨāđāļ§āđāļāđ EXPLAIN ANALYZE āļāļđāļāļĨāļāļĢāļ°āļāļ āļāļēāļĢāđāļŦāđāļāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļāļ Execution Time āļāđāļ§āļĒāļāļāđāļāļāļāļ°āļāđāļ§āļĒāđāļŦāđāđāļāđāļēāđāļāđāļāđāļĨāļķāļāļāļķāđāļāļāļ§āđāļēāļāļēāļĢāļāđāļēāļāļāļĪāļĐāļāļĩāđāļāļĩāļĒāļāļāļĒāđāļēāļāđāļāļĩāļĒāļ§ āđāļāļ°āļāļģāđāļŦāđāđāļāļĢāļĩāļĒāļĄāļāļąāļ§āđāļāļŦāļąāļ§āļāđāļāđāļŦāļĨāđāļēāļāļĩāđāļāļēāļĄāļĨāļģāļāļąāļ: Subquery Patterns â Pivot Queries â EXPLAIN Plan â Indexing â Anti-Patterns
āļāļĢāđāļāļĄāļāļĩāđāļāļ°āļāļīāļāļīāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđ Data Analytics āđāļĨāđāļ§āļŦāļĢāļ·āļāļĒāļąāļāļāļĢāļąāļ?
āļāļķāļāļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāđāļāļāđāļāđāļāļāļ, flashcards āđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļŠāļĢāļļāļ
āļŦāļąāļ§āļāđāļ SQL āļāļąāđāļāļŠāļđāļāļāļĩāđāļāļĨāđāļēāļ§āļĄāļēāļāļąāđāļāļŦāļĄāļāļĨāđāļ§āļāđāļāđāļāļāļąāļāļĐāļ°āļŠāļģāļāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļģāđāļŦāļāđāļ Data Analyst āļŠāļēāļĄāļēāļĢāļāļŠāļĢāļļāļāļāļĢāļ°āđāļāđāļāļŦāļĨāļąāļāđāļāđāļāļąāļāļāļĩāđ
- Correlated Subquery āļāļąāļ Regular Subquery â āļāđāļāļāđāļāđāļēāđāļāļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāđāļēāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ āđāļĨāļ°āļĢāļđāđāļ§āļīāļāļĩāđāļāļĨāļĩāđāļĒāļ Correlated Subquery āđāļāđāļ CTE + JOIN āđāļĄāļ·āđāļāđāļŦāļĄāļēāļ°āļŠāļĄ
- EXISTS āļāļąāļ IN â EXISTS āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļĄāļĩāļāļĒāļđāđāļāļāļāļāđāļāļĄāļđāļĨāļĄāļēāļāļāļ§āđāļē IN āđāļāļĒāđāļāļāļēāļ°āļāļąāļāļāļļāļāļāđāļāļĄāļđāļĨāļāļāļēāļāđāļŦāļāđ āđāļĨāļ° NOT EXISTS āļāļąāļāļāļēāļĢ NULL āđāļāđāļāļđāļāļāđāļāļāļāļ§āđāļē NOT IN
- Pivot Query â āđāļāļāļāļīāļ Conditional Aggregation āļāđāļ§āļĒ CASE āđāļāđāļāļ§āļīāļāļĩāļĄāļēāļāļĢāļāļēāļāļāļĩāđāđāļāđāđāļāđāļāļąāļāļāļļāļ Database āļŠāđāļ§āļ CROSSTAB āđāļāđāļāļāļēāļāđāļĨāļ·āļāļāđāļāļīāđāļĄāđāļāļīāļĄāļŠāļģāļŦāļĢāļąāļ PostgreSQL
- EXPLAIN Plan â āļāļąāļāļĐāļ°āļāļēāļĢāļāđāļēāļ Execution Plan āļāļ°āļāđāļ§āļĒāļĢāļ°āļāļļ Bottleneck āđāļĨāļ°āļāļąāļāļŠāļīāļāđāļāđāļĨāļ·āļāļāļ§āļīāļāļĩāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāđāļāļĒāđāļēāļāđāļĄāđāļāļĒāļģ
- Indexing â āļāļēāļĢāļāļāļāđāļāļ Index āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄ āļāļąāđāļ Single Column, Composite, Covering āđāļĨāļ° Partial Index āļŠāļēāļĄāļēāļĢāļāļāļĢāļąāļāļāļĢāļļāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļāļ Query āđāļāđāļāļĒāđāļēāļāļĄāļŦāļēāļĻāļēāļĨ
- Anti-Patterns â āļāļēāļĢāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļāļēāļĢāđāļāđāļāļąāļāļāđāļāļąāļāļāļąāļāļāļāļĨāļąāļĄāļāđāļāļĩāđāļĄāļĩ Index āđāļĨāļ°āļāļēāļĢāļĢāļ°āļ§āļąāļāļāļąāļāļāļąāļ NOT IN āļāļąāļ NULL āđāļāđāļāļāļ§āļēāļĄāļĢāļđāđāļāļĩāđāđāļŠāļāļāļāļķāļāļāļĢāļ°āļŠāļāļāļēāļĢāļāđāļāļĢāļīāļ
āļāļēāļĢāđāļāļĢāļĩāļĒāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāļĢāļ°āļāļāđāļāļŦāļąāļ§āļāđāļāđāļŦāļĨāđāļēāļāļĩāđāļāļ°āļāđāļ§āļĒāđāļāļīāđāļĄāļāļ§āļēāļĄāļĄāļąāđāļāđāļāđāļĨāļ°āđāļāļāļēāļŠāđāļāļāļēāļĢāļāđāļēāļāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļāđāļāļģāđāļŦāļāđāļ Data Analyst āđāļāđāļāļĒāđāļēāļāļĄāļĩāļāļąāļĒāļŠāļģāļāļąāļ
āđāļĢāļīāđāļĄāļāļķāļāļāđāļāļĄāđāļĨāļĒ!
āļāļāļŠāļāļāļāļ§āļēāļĄāļĢāļđāđāļāļāļāļāļļāļāļāđāļ§āļĒāļāļąāļ§āļāļģāļĨāļāļāļŠāļąāļĄāļ āļēāļĐāļāđāđāļĨāļ°āđāļāļāļāļāļŠāļāļāđāļāļāļāļīāļāļāļĢāļąāļ
āļāļļāļāļŦāļēāļāļąāđāļāđāļ Data Analytics āđāļāļāđāļŦāļĄ
āđāļāđāļāļāļĢāļīāļāļŦāļāļķāđāļāļāļīāđāļ āļāļąāđāļāļāļĩāđāļāđāļāļāļāļĒāļđāđāļŦāļāļķāđāļāļāļļāļ āļ§āļąāļāļĨāļ°āļŦāļāļķāđāļāļāļĢāļąāđāļ āļĨāļāļāđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāļĄāļĩāļāļąāļāļāļĩ

āđāļāļĩāļĒāļāđāļāļĒ
Anthony Fillion-Mailletāļāļđāđāļāđāļāļāļąāđāļ SharpSkill
āđāļāđāļāļāļąāļāļāļąāļāļāļēāļāļđāļĨāļŠāđāļāļāļĄāļēāļāļ§āđāļē 10 āļāļĩ āļāļđāđāļĨ SharpSkill āđāļĨāļ°āļĢāļąāļāļāļīāļāļāļāļāļāļļāļāļŠāļīāđāļāļāļĩāđāđāļāļĒāđāļāļĢāđāļāļĩāđāļāļĩāđ
āļāļąāļāđāļāļāđāļĄāļ·āđāļ 15 āļāļĪāļĐāļ āļēāļāļĄ 2569
āđāļāđāļ
āđāļāļĢāđ
āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ

dbt āļŠāļģāļŦāļĢāļąāļ Data Analyst āđāļāļāļĩ 2026: āļāļēāļĢāļŠāļĢāđāļēāļāđāļĄāđāļāļĨ āļāļēāļĢāļāļāļŠāļāļ āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ
āđāļĢāļĩāļĒāļāļĢāļđāđ dbt āļŠāļģāļŦāļĢāļąāļ Data Analyst āļāļąāđāļāđāļāđāļāļēāļĢāļŠāļĢāđāļēāļāđāļĄāđāļāļĨ āļāļēāļĢāļāļāļŠāļāļāļāđāļāļĄāļđāļĨ āđāļāļāļāļāļķāļāļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļāļāļĩāđāļāļāļāđāļāļĒ āļāļĢāđāļāļĄāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļāđāļĨāļ°āđāļāļ§āļāļāļīāļāļąāļāļīāļāļĩāđāļāļĩ

25 āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Data Analytics āļāļĩāđāļāļāļāđāļāļĒāļāļĩāđāļŠāļļāļāđāļāļāļĩ 2026
āļĢāļ§āļĄāļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ Data Analytics āļāļĩāđāļāļđāļāļāļēāļĄāļāđāļāļĒāļāļĩāđāļŠāļļāļāđāļāļāļĩ 2026 āļāļĢāļāļāļāļĨāļļāļĄ SQL, Python, Power BI, āļŠāļāļīāļāļī āđāļĨāļ°āļāļģāļāļēāļĄāđāļāļīāļāļāļĪāļāļīāļāļĢāļĢāļĄ āļāļĢāđāļāļĄāļāļģāļāļāļāđāļāļĒāļĨāļ°āđāļāļĩāļĒāļāđāļĨāļ°āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ

Pandas 3.0 āđāļāļāļĩ 2026: API āđāļŦāļĄāđ, Breaking Changes āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđāļāļēāļ
āļāļđāđāļĄāļ·āļāļāļāļąāļāļŠāļĄāļāļđāļĢāļāđāđāļāļĩāđāļĒāļ§āļāļąāļ Pandas 3.0 āļāļĢāļāļāļāļĨāļļāļĄ Copy-on-Write, PyArrow string backend, pd.col() expressions, breaking changes āđāļĨāļ°āļāļģāļāļēāļĄāļŠāļąāļĄāļ āļēāļĐāļāđ data analytics