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

Hvordan tæller man alle kombinerede forekomster i SQL?

Ikke nemt, fordi du har forskellige antal matchede produkter i den sidste række sammenlignet med de andre rækker. Du kan muligvis gøre det med en slags GROUP_CONCAT() operator (tilgængelig i MySQL; implementerbar i andre DBMS, såsom Informix og sandsynligvis PostgreSQL), men det er jeg ikke sikker på.

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;

Håndtering af den tredobbelte kamp er ikke-triviel; at udvide det længere end det er bestemt ret svært.



  1. Forskel i SQL mellem operator og>=&<=operator

  2. Sådan dokumenterer du din SQL Server-database

  3. MySQL fusionerer 2 resultatsæt eksklusiv rekorder i det første

  4. UTF-8-strenge i en MySQL-database blev rodet efter konfigurationsændring