如何根据总产品对用户群进行分组
USER_TABLE
id user_id product
-- ------- --------
1 1 abcd
1 1 efgh
1 1 ijkl
1 2 mnop
1 2 qrst
1 3 uvwx
1 3 yxab
user_product_table
user total_product
---- -------------
abc 3
def 2
ghi 2
加入user_table和user_product_table,我会得到
count(*)
包含group by
和user_product_table.user
user total_product
---- -------------
abc 3
def, ghi 2
但是,我的预期结果是
&
我可能有10000多条记录,我确信很多用户拥有相同的总产品,我需要根据他们的总产品对用户群进行分组
答案 0 :(得分:1)
您的查询按预期工作并提供正确的结果。如果您希望将具有相同数量产品的用户组合在一起,则可以在mysql中执行此操作。但是如果你有这么多记录,那么该列表对于total_product = 2或total_product = 3有多长。这有道理吗?
反正。要做到这一点,只需将您的查询(不是不幸地给出)包装到另一个查询中。
我想这是您现有的查询:
SELECT u.name, COUNT(p.id) as total_products
FROM user_table u
JOIN user_product_table p ON p.user_id=u.id
现在我们按名称分组
SELECT GROUP_CONCAT(a.name) as names, a.total_products
FROM (
SELECT u.name, COUNT(p.id) as total_products
FROM user_table u
JOIN user_product_table p ON p.user_id=u.id
) as a
GROUP BY a.total_products
请注意,GROUP_CONCAT列只会显示一定数量的文字。如果连接的名称较长,则可能缺少某些名称。