0

我有一张不同类别的桌子。是否可以从每个类别中返回两个随机行?

我的桌子:

-----------------------------
| 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                 |
-----------------------------
4

2 回答 2

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;
于 2013-07-19T19:55:09.107 回答
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 个 id。

于 2013-07-19T20:18:16.513 回答