MySQL - 基于总产品的组用户

时间:2016-11-29 16:02:05

标签: mysql

如何根据总产品对用户群进行分组

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 byuser_product_table.user user total_product ---- ------------- abc 3 def, ghi 2

的简单sql

但是,我的预期结果是

&

我可能有10000多条记录,我确信很多用户拥有相同的总产品,我需要根据他们的总产品对用户群进行分组

1 个答案:

答案 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列只会显示一定数量的文字。如果连接的名称较长,则可能缺少某些名称。