是否有任何选项可以在不使用临时表或过程的情况下获得一个SQL查询中所有元素的计数组合?
考虑以下三个表:
样本数据
1 AAA
2 BBB
3 CCC
1 some_date
2 some_date
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;
处理三重匹配是不平凡的;进一步扩展它绝对是非常困难的。
关于sql - 如何计算SQL中所有合并的出现次数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4127728/