PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie werden alle kombinierten Vorkommen in SQL gezählt?

Nicht einfach, weil Sie in der letzten Reihe eine andere Anzahl übereinstimmender Produkte haben als in den anderen Reihen. Möglicherweise können Sie dies mit einer Art GROUP_CONCAT()-Operator tun (verfügbar in MySQL; implementierbar in anderen DBMS wie Informix und wahrscheinlich PostgreSQL), aber da bin ich mir nicht sicher.

Paarweiser Abgleich

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;

Der Umgang mit dem Triple-Match ist nicht trivial; es darüber hinaus zu erweitern ist definitiv ziemlich schwierig.