1. Basic Aggregation & Grouping

Scenario:

CREATE TABLE sales (
  sale_id INT,
  sale_date DATE,
  amount DECIMAL(10,2),
  region VARCHAR(50)
);

INSERT INTO sales (sale_id, sale_date, amount, region) VALUES
(1, '2025-01-15', 100.00, 'North'),
(2, '2025-02-10', 150.00, 'South'),
(3, '2025-03-05', 200.00, 'East'),
(4, '2025-04-25', 250.00, 'North'),
(5, '2025-05-30', 300.00, 'South'),
(6, '2025-06-15', 350.00, 'East'),
(7, '2025-07-01', 400.00, 'North');

Task:

Results:

2. Joining Data & Aggregation

Scenario:

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_date DATE,
  order_total DECIMAL(10,2)
);

CREATE TABLE customers (
  customer_id INT,
  customer_name VARCHAR(100)
);

INSERT INTO customers (customer_id, customer_name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Carol'),
(4, 'Dave');

INSERT INTO orders (order_id, customer_id, order_date, order_total) VALUES
(101, 1, '2025-03-10', 250.00),
(102, 2, '2025-04-15', 300.00),
(103, 1, '2025-05-20', 450.00),
(104, 3, '2025-06-05', 500.00),
(105, 4, '2025-07-02', 150.00),
(106, 2, '2025-07-03', 200.00);

Task:

Results:

3. Window Functions

Scenario:

CREATE TABLE transactions (
  transaction_id INT,
  customer_id INT,
  transaction_date DATE,
  amount DECIMAL(10,2)
);

INSERT INTO transactions (transaction_id, customer_id, transaction_date, amount) VALUES
(1, 1, '2025-01-01', 100.00),
(2, 1, '2025-01-15', 150.00),
(3, 2, '2025-02-10', 200.00),
(4, 1, '2025-02-20', 50.00),
(5, 2, '2025-03-05', 300.00);

Task:

Results:

4. Subqueries & Filtering

Scenario:

Task:

Results:

5. Date and Time Functions

Scenario:

Task:

Results:

6. Pivoting Data

Scenario:

CREATE TABLE sales (
  sale_date DATE,
  product_category VARCHAR(50),
  sale_amount DECIMAL(10,2)
);

INSERT INTO sales (sale_date, product_category, sale_amount) VALUES
('2025-01-10', 'Electronics', 500.00),
('2025-01-15', 'Clothing', 200.00),
('2025-02-20', 'Electronics', 700.00),
('2025-02-25', 'Clothing', 300.00),
('2025-02-28', 'Furniture', 400.00);

Task:

Results:

7. Comparative Analysis

Scenario:

sale_date   amount
2025-06-01  1000.00
2025-06-15  1500.00
2025-07-01  2000.00
2025-07-10  2500.00

Task:

Results:

8. Handling Nulls and Data Quality

Scenario:

CREATE TABLE orders (
  order_id INT,
  customer_id INT,
  order_date DATE,
  order_total DECIMAL(10,2)
);

INSERT INTO orders (order_id, customer_id, order_date, order_total) VALUES
(201, 1, '2025-04-10', 300.00),
(202, 2, '2025-04-15', NULL),
(203, 3, '2025-04-20', 450.00),
(204, 1, '2025-04-25', NULL);

Task:

Results:

9. Using CTEs for Complex Queries

Scenario:

CREATE TABLE daily_sales (
  sale_date DATE,
  revenue DECIMAL(10,2)
);

INSERT INTO daily_sales (sale_date, revenue) VALUES
('2025-06-01', 1000.00),
('2025-06-02', 1200.00),
('2025-06-03', 1100.00),
('2025-06-07', 1300.00),
('2025-06-08', 1400.00);

Task:

Results:

10. Performance Optimization

Scenario:

Task:

Answer

If queries filter by order_date and customer_id, I’d index both:

Indexes improve read speed but slow down inserts, so I’d only index what’s necessary.