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