我有这样一个数据集:
| 用户标识|产物|刻痕|
| - -|- -|- -|
| A级|一个|四个|
| A级|2个|四个|
| A级|三个|五个|
| B|一个|四个|
| B| 2个|四个|
| B|三个|五个|
我希望有这样的输出:
| 用户标识1|用户标识2|匹配产品|
| - -|- -|- -|
| A级|B| 1 2 3|
但我只能通过以下查询获得前两列:
CREATE TABLE score_greater_than_3 AS
SELECT userid, productid, score
FROM reviews
WHERE score >= 4;
SELECT s1.userid as userid1, s2.userid as userid2
FROM score_greater_than_3 s1
INNER JOIN score_greater_than_3 s2 ON s1.productid=s2.productid AND s1.userid<s2.userid
GROUP BY s1.userid, s2.userid
HAVING count(*)>=3;
我如何才能得到匹配的产品?我可以与这样的输出,如果它更容易
| 使用者1|用户2|配套产品|
| - -|- -|- -|
| 一种|B|一个|
| 一种|B| 2个|
| 一种|B|三个|
2条答案
按热度按时间xcitsw881#
请尝试以下操作:
整个脚本请看:DB Fiddle
lhcgjxsq2#
您可以尝试使用下列查询:
它使用一个Common Table Expression,允许您在一个临时空间中分配表,该临时空间将持续到查询结束。您的下一步使用自连接是正确的,尽管它缺少GROUP_CONCAT聚合函数,该函数允许您在一个类似字符串的字段上进行聚合。您可以设置“separator”参数来决定要使用哪个字符串来连接值。
尝试完整查询here。