Input Tokens
0
Output Tokens
0
Duration
0
Cost
0
Context
Input
For each dealership, rank employees by total sales amount in descending order. In the results I want to see dealership_name, employee_name , total_sales and sales_rank
Expected output
SELECT d.name AS dealership_name, e.name AS employee_name, SUM(s.sale_price) AS total_sales, RANK() OVER (PARTITION BY d.branch_id ORDER BY SUM(s.sale_price) DESC) AS sales_rank FROM sales s JOIN employees e ON s.employee_id = e.employee_id JOIN dealerships d ON s.branch_id = d.branch_id GROUP BY d.name, e.name, d.branch_id;
Model output
WITH employee_sales AS (
SELECT employee_id, SUM(sale_price) AS total_sales
FROM sales
WHERE branch_id = dealerships.branch_id
GROUP BY employee_id
),
denominator AS (
SELECT COUNT(employee_id) AS num_employees
FROM employees
WHERE dealerships.branch_id = branch_id
),
RANKED_EMPLOYEES AS (
SELECT employee_id, total_sales, ROW_NUMBER() OVER (ORDER BY total_sales DESC) AS sales_rank
FROM employee_sales
JOIN employees ON employee_sales.employee_id = employees.employee_id
JOIN dealerships ON employees.branch_id = dealerships.branch_id
JOIN (SELECT ROW_NUMBER() OVER (ORDER BY employee_id) AS rank
FROM employees
JOIN dealerships ON employees.branch_id = dealerships.branch_id
ORDER BY dealerships.name
) AS ranked_employees ON ranked_employees.rank = RANK() OVER (PARTITION BY dealerships.branch_id ORDER BY employee_sales.total_sales DESC)
)
SELECT dealerships.name AS dealership_name, employees.name AS employee_name, employee_sales.total_sales, ranked_employees.sales_rank
FROM RANKED_EMPLOYEES
JOIN dealerships ON ranked_employees.branch_id = dealerships.branch_id
JOIN employees ON ranked_employees.employee_id = employees.employee_id;