PARTITION BY vs GROUP BY: Functions
Module: Window Functions
**GROUP BY Syntax:**
```sql
SELECT
grouping_columns,
aggregate_functions
FROM table
WHERE conditions
GROUP BY grouping_columns
HAVING aggregate_conditions
ORDER BY columns;
```
**PARTITION BY Syntax:**
```sql
SELECT
all_columns,
window_function() OVER (PARTITION BY columns)
FROM table
WHERE conditions
ORDER BY columns;
```
**Combined Syntax:**
```sql
WITH grouped_data AS (
SELECT col1, AGG(col2) as summary
FROM table GROUP BY col1
)
SELECT
original.*,
FUNC() OVER (PARTITION BY col1) as context,
grouped_data.summary
FROM table original
JOIN grouped_data ON original.col1 = grouped_data.col1;
```
GROUP BY collapses rows into groups - one row per unique combination of grouping columns
PARTITION BY preserves all rows while adding group-level calculations as new columns
GROUP BY requires aggregate functions (COUNT, SUM, AVG) in SELECT clause
PARTITION BY uses window functions with OVER clause for calculations
Both can be combined in the same query using CTEs or subqueries
HAVING clause filters groups in GROUP BY, WHERE clause filters individual rows
Excellent support for both approaches. Advanced window functions and parallel GROUP BY processing.