Mastering SQL: Advanced Querying Techniques and Aggregate Functions
Ever feel like you're just scratching the surface with basic SELECT statements? Let's dive deep into the powerful world of advanced SQL techniques that can transform how you work with data.
Part 1: Advanced Querying Techniques
1.1 Subqueries: The SQL Inception
Think of subqueries as queries within queries – like opening a Russian nesting doll. They're powerful tools for complex data operations.
Finding employees who earn more than average
SELECT first_name, salary
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
You can use subqueries in three ways:
Pro tip: While subqueries are powerful, they can impact performance. Use them judiciously, and consider alternatives like JOINs when possible.
1.2 Common Table Expressions (CTEs): Your SQL Swiss Army Knife
CTEs are like creating temporary named result sets that you can reference within your main query. They make complex queries more readable and maintainable.
WITH employee_departments AS (
SELECT department_id, COUNT(*) as emp_count
FROM employees
GROUP BY department_id
)
SELECT d.department_name, ed.emp_count
FROM employee_departments ed
JOIN departments d ON d.department_id = ed.department_id;
The beauty of CTEs lies in their:
1.3 Views: The Reusable Templates
Views are like saved queries that act as virtual tables. They're perfect for:
CREATE VIEW high_value_orders AS
SELECT
c.customer_name,
o.order_id,
o.total_amount
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.total_amount > 10000;
Now you can query this view like a regular table:
SELECT * FROM high_value_orders
WHERE total_amount > 15000;
1.4 Indexes: The Speed Demons
Indexes are like the table of contents in a book – they help SQL find data faster. Without them, SQL would need to scan entire tables (imagine reading a book cover-to-cover to find one paragraph).
Types of Indexes:
Best Practices:
Recommended by LinkedIn
Part 2: Aggregate Functions
2.1 COUNT, SUM, AVG: The Basic Analytics
These functions turn rows of data into meaningful insights:
SELECT
department_id,
COUNT(*) as employee_count,
SUM(salary) as total_salary,
AVG(salary) as average_salary
FROM employees
GROUP BY department_id;
2.2 MIN, MAX: The Boundary Explorers
Perfect for finding ranges and extremes in your data:
SELECT
YEAR(order_date) as year,
MIN(total_amount) as lowest_order,
MAX(total_amount) as highest_order
FROM orders
GROUP BY YEAR(order_date);
2.3 GROUP BY with HAVING: The Data Slicer
While WHERE filters rows before grouping, HAVING filters after grouping:
SELECT
department_id,
COUNT(*) as employee_count,
AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5 AND AVG(salary) > 50000;
2.4 Window Functions: The Game Changers
Window functions perform calculations across a set of rows related to the current row:
SELECT
employee_name,
salary,
department_id,
AVG(salary) OVER (PARTITION BY department_id) as dept_avg,
salary - AVG(salary) OVER (PARTITION BY department_id) as diff_from_avg,
RANK() OVER (ORDER BY salary DESC) as salary_rank
FROM employees;
Common Window Functions:
Real-World Application
Let's tie it all together with a practical example. Imagine analyzing sales performance:
WITH monthly_sales AS (
SELECT
DATE_TRUNC('month', order_date) as month,
SUM(total_amount) as total_sales
FROM orders
GROUP BY DATE_TRUNC('month', order_date)
)
SELECT
month,
total_sales,
LAG(total_sales) OVER (ORDER BY month) as prev_month_sales,
((total_sales - LAG(total_sales) OVER (ORDER BY month)) /
LAG(total_sales) OVER (ORDER BY month) * 100) as growth_percentage
FROM monthly_sales
WHERE total_sales > (
SELECT AVG(total_sales) FROM monthly_sales
)
ORDER BY month;
This query combines CTEs, window functions, and subqueries to calculate month-over-month sales growth for above-average months.
Key Takeaways
Remember: SQL is not just about getting data – it's about getting it efficiently and meaningfully. These advanced techniques are your tools for doing just that.
SQL #DataAnalysis #Programming #DatabaseOptimization #TechSkills
Application Developer at Accenture in India
3moInsightful