我有一个产品系统。每次用户输入产品时,我都会在我的数据库中插入一条记录。
我有一个包含用户和id_products的表,如下所示:
users id_product
____________________________
jondoe 2
george 9
jondoe 5
jondoe 2
george 9
george 9
george 2
我需要一个结果(查询),它显示每个用户的TOP访问产品ID,因此结果将是这样的:
jondoes most visited product is ID 2
georges most visitedproduct is ID 9
我一直在寻找答案,但我无法弄明白。非常感谢你的帮助,我非常感激。
扬
答案 0 :(得分:1)
这很痛苦,因为它涉及聚合。解决此问题的一种方法是使用非常复杂的查询。另一个使用变量。第三种方法使用在许多情况下有效的聚合技巧:
select user,
substring_index(group_concat(id_product order by cnt desc), ',', 1) as mostCommonProduct
from (select user, id_product, count(*) as cnt
from t
group by user, id_product
) t
group by user;
使用此方法时的一个危险是中间结果可能太长。您可以设置group_concat_max_len
系统变量来解决该特定问题。