PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como contar todas as ocorrências combinadas no SQL?


Não é fácil porque você tem números diferentes de produtos correspondentes na última linha em comparação com as outras linhas. Você pode fazer isso com algum tipo de operador GROUP_CONCAT() (disponível no MySQL; implementável em outros DBMS, como Informix e provavelmente PostgreSQL), mas não tenho certeza disso.

Correspondência de pares

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;

Lidar com a partida tripla não é trivial; estendê-lo mais do que isso é definitivamente bastante difícil.