PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment compter toutes les occurrences combinées en SQL ?

Pas facilement car vous avez un nombre différent de produits correspondants dans la dernière ligne par rapport aux autres lignes. Vous pourrez peut-être le faire avec une sorte d'opérateur GROUP_CONCAT() (disponible dans MySQL ; implémentable dans d'autres SGBD, comme Informix et probablement PostgreSQL), mais je n'en suis pas sûr.

Correspondance par paires

SELECT p1.product_name AS name1, p2.product_name AS name2, COUNT(*)
  FROM (SELECT p.product_name, h.transaction_id
          FROM products AS p
          JOIN transactions_has_products AS h ON h.product_id = p.product_id
       ) AS p1
  JOIN (SELECT p.product_name, h.transaction_id
          FROM products AS p
          JOIN transactions_has_products AS h ON h.product_id = p.product_id
       ) AS p2
    ON p1.transaction_id = p2.transaction_id
   AND p1.product_name   < p2.product_name
 GROUP BY p1.name, p2.name;

La gestion du triple match n'est pas triviale; l'étendre plus loin que cela est certainement assez difficile.