sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur räknar man alla kombinerade förekomster i SQL?

Inte lätt eftersom du har olika antal matchade produkter på den sista raden jämfört med de andra raderna. Du kanske kan göra det med någon sorts GROUP_CONCAT()-operator (tillgänglig i MySQL; implementerbar i andra DBMS, som Informix och förmodligen PostgreSQL), men jag är inte säker på det.

Parvis matchning

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;

Att hantera trippelmatchen är icke-trivialt; att utvidga det längre än så är definitivt ganska svårt.



  1. c++ mysql-anslutning bad_alloc med c++-kontakt

  2. Returnerar aggregerade MySQL-funktioner alltid en enda rad?

  3. Villkorlig SQL ORDER BY ASC/DESC för alfakolumner

  4. Hur kan jag ändra SID för en Oracle XE-instans