mysql从每个组中选择3个项目并在多个列中输出结果集

时间:2013-04-10 22:20:04

标签: mysql

我有一个像这样的表“产品”:

store_id    product
----------------------------------
1           A
1           B
1           C
1           D
1           E
2           AA
2           BB
2           CC
2           DD

从每个商店中随机选择3个产品的mysql查询是什么,并将产品放在每个商店的自己的列上,这样我得到的结果集如下:

store_id    product_1    product_2    product_3
------------------------------------------------
1           A            D            E
2           BB           CC           DD

???

谢谢,

Commonboy

1 个答案:

答案 0 :(得分:1)

这可以为您提供所需的结果:

SELECT
  store_id,
  MAX(CASE WHEN row=1 THEN product END) product_1,
  MAX(CASE WHEN row=2 THEN product END) product_2,
  MAX(CASE WHEN row=3 THEN product END) product_3
FROM (
  SELECT
    CASE WHEN @last=store_id THEN @row:=@row+1 ELSE @row:=1 END row,
    store_id,
    product,
    @last := store_id
  FROM (
    SELECT store_id, product
    FROM products
    ORDER BY store_id, rand()
    ) s
) r
WHERE
  row<=3
GROUP BY
  store_id

请参阅小提琴here

在s子查询中,我按照store_id排序所有产品,然后随机,在r子查询中我正在计算行号,在外部查询上我正在调整结果(我是按store_id分组) ,我将第1行放入product_1列,第2行放入product_2第3行放入product_3)。