J'ai une table avec les commandes et leurs produits:
+-------+---------+
| Order | Product |
+-------+---------+
| A | 1 |
| A | 2 |
| A | 2 |
| A | 3 |
| B | 1 |
| B | 3 |
| B | 4 |
| C | 1 |
| C | 3 |
+-------+---------+
Je veux compter les occurrences, lorsque deux produits sont commandés ensemble pour identifier les combinaisons de produits populaires:
+---------------+----------------+-------+
| First product | Second product | Count |
+---------------+----------------+-------+
| 1 | 2 | 1 |
| 1 | 3 | 3 |
| 1 | 4 | 1 |
| 2 | 3 | 1 |
| 2 | 4 | 0 |
| 3 | 4 | 0 |
+---------------+----------------+-------+
Utilisez une auto-jointure et un groupe en:
select op1.product, op2.product, count(*)
from orderproduct op1 join
orderprodut op2
on op1.order = op2.order and
op1.product < op2.product
group by op1.product, op2.product
order by count(*) desc;
Si vous voulez les combinaisons les plus populaires, je ne vois pas quelles combinaisons avec 0
seraient nécessaires, donc cela ne les inclut pas.
Ce qui précède compte toutes les combinaisons (multiples dans une commande). Si vous souhaitez compter les commandes, utilisez count(distinct)
:
select op1.product, op2.product, count(distinct op1.order)
from orderproduct op1 join
orderprodut op2
on op1.order = op2.order and
op1.product < op2.product
group by op1.product, op2.product
order by count(*) desc;
Ou utilisez select distinct
avec des sous-requêtes. Le plus rapide dépend du nombre de produits en double dans les commandes.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras