我有一张不同类别的表格。是否可以从每个类别中返回两个随机行?
我的表:
-----------------------------
| ID | CATEGORY |
-----------------------------
| 1 | PINK |
| 2 | GREEN |
| 3 | PINK |
| 4 | GREEN |
| 5 | BLUE |
| 6 | BLUE |
| 7 | BLUE |
| 8 | PINK |
| 9 | GREEN |
-----------------------------
我想要输出的内容:
-----------------------------
| ID | CATEGORY |
-----------------------------
| 1 | PINK |
| 8 | PINK |
| 2 | GREEN |
| 4 | GREEN |
| 6 | BLUE |
| 7 | BLUE |
-----------------------------
答案 0 :(得分:0)
select distinct c1.ID, c2.category
from mytable c1
join mytable c2 ON c1.category = c2.category and c1.ID <> c2.ID
group by c1.category, c2.ID;
答案 1 :(得分:0)
以下是从每个类别中获取两个随机行的方法:
select t.*
from t join
(select t.category, substring_index(group_concat(id order by rand()), ',', 2) as ids
from t
group by category
) tc
on find_in_set(t.id, tc.ids) > 0;
它使用group_concat()
以随机顺序将ID放入列表中,选择前两个,然后返回并查找具有这些ID的行。它很容易推广到2个以上。