通过user_id

时间:2018-11-20 15:39:32

标签: mysql

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

id,user_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]

是否可以使用GROUP BY user_idDISTINCT来做到这一点?

1 个答案:

答案 0 :(得分:0)

编辑(based on comments):

我们可以使用用户定义的变量将行号分配给value分区中的各种user_id。最终,我们将过滤掉该结果集,以使每个user_id仅考虑3行。

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

上一个问题的答案:

请尝试以下操作:

SELECT user_id, 
       CONCAT('[', 
              SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT value), ',', 3), 
              ']') AS user_values 
FROM your_table
GROUP BY user_id