Mysql 分组以后取每组的前三名数据

mysql>select*fromt_subject;|id|uid|subject||1|1|aa||2|2|bb||3|3|cc||4|4|dd||5|2|ee||6... mysql> select * from t_subject;
| id | uid | subject |
| 1 | 1 | aa |
| 2 | 2 | bb |
| 3 | 3 | cc |
| 4 | 4 | dd |
| 5 | 2 | ee |
| 6 | 2 | rr |
| 7 | 3 | tt |
| 8 | 2 | yy |
| 9 | 3 | qq |
| 10 | 4 | oo |
| 11 | 3 | pp |
| 12 | 3 | kk |
| 13 | 1 | mm |
| 14 | 4 | nn |
| 15 | 1 | ss |
| 16 | 4 | vv |
| 17 | 1 | ff |

mysql> select uid,group_concat(a.subject) from t_subject a group by a.uid ;

| uid | group_concat(a.subject) |
| 1 | aa,ff,ss,mm |
| 2 | yy,rr,ee,bb |
| 3 | kk,pp,xx,qq,tt,cc |
| 4 | nn,dd,vv,oo |

----我想要的是如下效果的 该怎么写啊(就是取出分组后每组的前三条记录)---
| uid | group_concat(a.subject) |
| 1 | aa,ff,mm |
| 2 | yy,rr,ee |
| 3 | kk,pp,xx |
| 4 | nn,dd,vv |

要排序的啊!用substring不过必须要排序后才能截取啊
展开
 我来答
flyingFish211
2010-12-28 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.5万
采纳率:50%
帮助的人:1.2亿
展开全部
Try this one,should be fine
下面这个已经有排序了哦,不行么?

SELECT uid, group_concat(subject)
FROM (SELECT id, uid, subject
FROM (SELECT id, uid, subject,
(SELECT COUNT(*)
FROM t_subject
WHERE uid = t.uid
AND subject <= t.subject) RK
FROM t_subject t) t1
WHERE rk <= 3) t2
GROUP BY uid

多了个a.原来
或者你直接用个substring()得了。。。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
猪猪哒琳
2011-01-04 · TA获得超过1953个赞
知道小有建树答主
回答量:957
采纳率:0%
帮助的人:541万
展开全部
不列出表结构及测试数据,只能这样大概写个思路了:

select a.*
from
(
select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_id
from 表 t1
) a
where a.group_id<=3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
firebellqq
2010-12-28 · 超过34用户采纳过TA的回答
知道答主
回答量:135
采纳率:0%
帮助的人:0
展开全部
在后面加上 limit 3
就像这样select * from table limit 3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友7862e95
2010-12-28
知道答主
回答量:47
采纳率:0%
帮助的人:36.2万
展开全部
你这个需求在数据库里面实现起来很麻烦,而且过于复杂效率就会很低,建议你用最简单的方式查出来之后用编程语言来实现是取的三个还是几个!
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式