1

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

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

???

谢谢,

普通男孩

4

1 回答 1

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

在此处查看小提琴。

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

于 2013-04-10T22:48:58.307 回答