Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql从每个组中选择3项,并在多个列中输出结果集_Mysql - Fatal编程技术网

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

mysql从每个组中选择3项,并在多个列中输出结果集,mysql,Mysql,我有这样一个桌面产品: store_id product ---------------------------------- 1 A 1 B 1 C 1 D 1 E 2 AA 2 BB 2 CC 2 DD mysql查询如何从每个商店随机选择3种产品,并将产品放在每个商店自己的列中,从而得到如下结果集: st

我有这样一个桌面产品:

store_id    product
----------------------------------
1           A
1           B
1           C
1           D
1           E
2           AA
2           BB
2           CC
2           DD
mysql查询如何从每个商店随机选择3种产品,并将产品放在每个商店自己的列中,从而得到如下结果集:

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

谢谢


Commonboy

这将为您提供所需的结果:

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
请看小提琴


在s子查询中,我按存储id排序所有产品,然后按随机排序,在r子查询中,我计算行号,在外部查询中,我旋转结果,我按存储id分组,我将第1行放入列product_1,第2行放入product_2,第3行放入product_3。

这应该会给出您需要的结果:

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
请看小提琴

在s子查询中,我按照store_id对所有产品进行排序,然后按照random排序,在r子查询中,我计算行数,在外部查询中,我旋转结果,我按照store_id进行分组,我将行1放入列product_1,将行2放入product_2,将行3放入product_3