在mysql中为每个类别选择随机行

zfycwa2u  于 2023-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(136)

我有一张这样的table
| ID|类别|产物|
| - -----|- -----|- -----|
| 1| 1| p1|
| 2| 1| P2|
| 3| 1| p3|
| 4| 1| p4|
| 5个|2|第五层|
| 六|2|第6页|
| 七个|2| p7|
| 八|3| p8|
| 九个|3| p9|
| 十个|3| p10|
我尝试为每个类别选择一个随机产品。
结果如下:
| 类别|产物|
| - -----|- -----|
| 1| p3|
| 2| p7|
| 3| p8|
我尝试了这个查询,给我随机但不为每个类别没有重复SELECT类别,产品FROM表WHERE类别IN(1,2,3)ORDER BY RAND()LIMIT N

iugsix8n

iugsix8n1#

也许可以尝试使用与每个类别相关的子查询执行以下操作:

select category, (
  select product 
  from t t2 
  where t.category = t2.category
  order by rand() limit 1
) product
from t
group by category;
o2gm4chl

o2gm4chl2#

您可以按以下方式执行此操作:

SELECT t.category, t.product
FROM mytable t
inner join (
  select category, FLOOR((RAND() * (max(ID)-min(ID)+1))+min(ID)) as randomID
  from mytable
  group by category
) as s on s.category = t.category and s.randomID = t.ID

Demo here

iezvtpos

iezvtpos3#

另一种方法是使用PARTITION BY

with tmp as (
select  row_number() over (partition by category 
                           order by RAND() 
                          ) as rn,
        category,
        product
from t
)
select  category , 
        product  
from tmp
where rn = 1

相关问题