如何统计SQL中所有组合出现的次数?

2024-02-21

是否有任何选项可以获取所有元素的计数组合oneSQL 查询,不使用临时表或过程?

考虑这三个表:

  • 产品(id,产品名称)

  • 交易(ID、日期)

  • transaction_has_product(id,product_id,transaction_id)

样本数据

  • 产品

    1   AAA
    2   BBB
    3   CCC
    
  • 交易

    1   some_date
    2   some_date
    
  • transaction_has_products

    1   1   1
    2   2   1
    3   3   1
    4   1   2
    5   2   2
    

结果应该是:

AAA, BBB = 2   
AAA, CCC = 1   
BBB, CCC = 1   
AAA, BBB, CCC = 1

这并不容易,因为与其他行相比,最后一行中的匹配产品数量不同。您也许可以使用某种 GROUP_CONCAT() 运算符(在 MySQL 中可用;可在其他 DBMS 中实现,例如 Informix 和可能的 PostgreSQL)来完成此操作,但我对此没有信心。

成对匹配

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;

处理三重匹配并非易事;进一步扩展它肯定是相当困难的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何统计SQL中所有组合出现的次数? 的相关文章

随机推荐