Mysql 按用户id以数组形式获取不同的值

Mysql 按用户id以数组形式获取不同的值,mysql,Mysql,我想获得每个用户的不同值列表,每个用户限制3个值: id,用户id,值 1, 1, a 2, 1, b 3, 2, c 4, 1, b 5, 1, d 6, 1, e 预期结果: user_id, values 1, [a,b,d] 2, [c] 是否有一些方法可以通过用户id分组和区分分组来实现这一点?编辑(): 我们可以使用用户定义的变量将行号分配给用户id分区内的各种值。最后,我们将筛选出这个结果集,只考虑每个代码3行> USELID ID/COD>。 SELECT dt2.us

我想获得每个用户的不同值列表,每个用户限制3个值:

id,用户id,值

1, 1, a
2, 1, b
3, 2, c
4, 1, b
5, 1, d
6, 1, e
预期结果:

user_id, values
1, [a,b,d]
2, [c]
是否有一些方法可以通过用户id分组和区分分组来实现这一点?

编辑():

我们可以使用用户定义的变量将行号分配给
用户id
分区内的各种
值。最后,我们将筛选出这个结果集,只考虑每个代码3行> USELID ID/COD>。
SELECT 
  dt2.user_id, 
  dt2.value 
FROM 
(
  SELECT
    @rn := CASE WHEN @ui = dt.user_id THEN @rn + 1
                ELSE 1
           END AS row_no, 
    @ui = dt.user_id, 
    dt.value 
  FROM 
  (
    SELECT DISTINCT
      user_id, 
      value
    FROM your_table
    ORDER BY user_id 
  ) AS dt 
  CROSS JOIN (SELECT @rn := 0, @ui := null) AS user_init_vars 
) AS dt2 
WHERE dt2.row_no <= 3

你确定1的预期结果不应该是
1[a,b,d]
?@garythonas infact
[a,b,d,e]
@MadhurBhaiya“每个用户限制3个值”“每个用户限制3个值”@garythonas谢谢你的提示。我很幸运地改变了iTunes,它的性能很差,因为GROUP_CONCAT检索所有值,而不同的值可能包含数百万个条目。因此,我更喜欢一个查询,在这里我可以应用一个限制,而不是使用子字符串each@Chris您有权访问最新的MySQL服务器版本吗?你能使用8.0.2及以上版本吗?我使用Azure作为主机。所以我坚持5.7
SELECT user_id, 
       CONCAT('[', 
              SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT value), ',', 3), 
              ']') AS user_values 
FROM your_table
GROUP BY user_id