SQL:从每个类别中获取2行

时间:2013-07-19 19:36:54

标签: mysql sql

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

我的表:

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

2 个答案:

答案 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个以上。