我有一个像这样的表“产品”:
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
答案 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)。