SQL Differenza tra GROUP BY e DISTINCT


Esempio

GROUP BY viene utilizzato in combinazione con le funzioni di aggregazione. Considera la seguente tabella:

ID ordine ID utente nome del negozio orderValue data dell'ordine
1 43 Negozio A 25 20-03-2016
2 57 Negozio B 50 22-03-2016
3 43 Negozio A 30 25-03-2016
4 82 Negozio C 10 26-03-2016
5 21 Negozio A 45 29-03-2016

La query seguente utilizza GROUP BY per eseguire calcoli aggregati.

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;

e restituirà le seguenti informazioni

nome del negozio total_nr_orders nr_unique_customers average_order_value primo ordine ultimo ordine
Negozio A 3 2 33.3 20-03-2016 29-03-2016
Negozio B 1 1 50 22-03-2016 22-03-2016
Negozio C 1 1 10 26-03-2016 26-03-2016

Mentre DISTINCT viene utilizzato per elencare una combinazione univoca di valori distinti per le colonne specificate.

SELECT DISTINCT
    storeName,
    userId
FROM
    orders;
nome del negozio ID utente
Negozio A 43
Negozio B 57
Negozio C 82
Negozio A 21