I came across a statement that said “When using aggregate functions (COUNT(), CASE for conditional logic), the GROUP BY clause should include all non-aggregated columns that are selected.” What is the reason for this?
For example, I have a query where this is INCORRECT:
select
e.first_name,
e.last_name,
count(o.order_id) as num_orders,
(case when shipped_date <= required_date then 'On Time' else 'Late' end)
as shipped
from employees e
join orders o on e.employee_id = o.employee_id
group by e.employee_id
order by last_name, first_name, num_orders Desc
But this is CORRECT:
select
e.first_name,
e.last_name,
count(o.order_id) as num_orders,
(case when shipped_date <= required_date then 'On Time' else 'Late' end)
as shipped
from employees e
join orders o on e.employee_id = o.employee_id
group by e.first_name,e.last_name,shipped
order by last_name, first_name, num_orders Desc