Aggregate functions gộp nhiều rows thành một giá trị.
- NULL behavior quan trọng: COUNT(*) đếm tất cả rows kể cả NULL; COUNT(col) bỏ qua NULL —
COUNT(phone)cho biết bao nhiêu users có số điện thoại; SUM/AVG/MAX/MIN đều bỏ qua NULL. - DISTINCT trong aggregates:
COUNT(DISTINCT city)đếm số cities duy nhất,SUM(DISTINCT amount)tổng các giá trị không trùng. - STRING_AGG (PostgreSQL):
STRING_AGG(tag, ', ' ORDER BY tag)nối values thành string trong group —SELECT post_id, STRING_AGG(tag_name, ',') FROM post_tags GROUP BY post_id. - ARRAY_AGG:
ARRAY_AGG(email ORDER BY created_at)tạo array từ group values. - Conditional aggregation với FILTER:
COUNT() FILTER (WHERE status = 'active') AS active_count, COUNT() FILTER (WHERE status = 'inactive') AS inactive_count— pivot-style aggregation trong một query thay vì nhiều subqueries. - PERCENTILE:
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary)tính median — không bị ảnh hưởng bởi outliers như AVG.