PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come contare tutte le occorrenze combinate in SQL?

Non facilmente perché hai un numero diverso di prodotti abbinati nell'ultima riga rispetto alle altre righe. Potresti essere in grado di farlo con una sorta di operatore GROUP_CONCAT() (disponibile in MySQL; implementabile in altri DBMS, come Informix e probabilmente PostgreSQL), ma non ne sono sicuro.

Abbinamento a coppie

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;

Gestire il triplo match non è banale; estenderlo oltre è decisamente piuttosto difficile.