Skip to content

SQL Group By vs Distinct

GROUP BY is used in combination with aggregation functions. Consider the following table:

|orderId|userId|storeName|orderValue|orderDate |---|---|---|---|---|---|---|---|--- |1|43|Store A|25|20-03-2016 |2|57|Store B|50|22-03-2016 |3|43|Store A|30|25-03-2016 |4|82|Store C|10|26-03-2016 |5|21|Store A|45|29-03-2016

The query below uses GROUP BY to perform aggregated calculations.

SELECT
storeName,
COUNT(*) AS total_nr_orders,
COUNT(DISTINCT userId) AS nr_unique_customers,
AVG(orderValue) AS average_order_value,
MIN(orderDate) AS first_order,
MAX(orderDate) AS lastOrder
FROM
orders
GROUP BY
storeName;

and will return the following information

|storeName|total_nr_orders|nr_unique_customers|average_order_value|first_order|lastOrder |---|---|---|---|---|---|---|---|--- |Store A|3|2|33.3|20-03-2016|29-03-2016 |Store B|1|1|50|22-03-2016|22-03-2016 |Store C|1|1|10|26-03-2016|26-03-2016

While DISTINCT is used to list a unique combination of distinct values for the specified columns.

SELECT DISTINCT
storeName,
userId
FROM
orders;

|storeName|userId |---|---|---|---|---|---|---|---|--- |Store A|43 |Store B|57 |Store C|82 |Store A|21