sql >> Database >  >> RDS >> PostgreSQL

Hoe alle gecombineerde voorvallen in SQL tellen?

Niet gemakkelijk omdat je in de laatste rij verschillende aantallen gematchte producten hebt in vergelijking met de andere rijen. Je zou het misschien kunnen doen met een soort GROUP_CONCAT()-operator (beschikbaar in MySQL; implementeerbaar in andere DBMS, zoals Informix en waarschijnlijk PostgreSQL), maar daar ben ik niet zeker van.

Paarsgewijze overeenkomst

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;

Het afhandelen van de triple match is niet triviaal; het verder uitbreiden is zeker nogal moeilijk.



  1. PostgreSQL-ronde (v numeriek, s int)

  2. logging uitgebreidheid mysql 5.7

  3. Voorbeeld van SQL Server invoegen

  4. C# 2010, ODP.net, oproep opgeslagen procedure langs array