请教条mysql语句

newbieeee 2009-09-01 04:41:27
表table里有a,b,c三个字段,需要按c提取前10条
SELECT * FROM table ORDER by c desc limit 0,10;

但现在要求记录a,b字段完全相同时只保留其中c最大的那条,如果用
SELECT * FROM table GROUP by a,b ORDER by c desc limit 0,10;

由于数据量偏大,用时非常长,无法接受。
试了下distinct,
SELECT distinct a,b FROM table ORDER by c desc limit 0,10;

可以实现,但问题是不知道怎样同时取出c字段(实际表里是有很多其他字段的),select c,distinct a,b会报错,select distinct a,b,c又会把c也列入不重复的条件里。请问sql语句应该如何写?因为数据量比较大,请考虑下效率。
...全文
59 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
paulpeath 2009-09-01
cxd19880708:
max(c)是保留其中c最大的那条
回复
cxd19880708 2009-09-01
楼上的SQL中为什么要写个max?
回复
paulpeath 2009-09-01
SELECT a,b,max(c) as c FROM table GROUP by a,b ORDER by c desc limit 0,10;
回复
paulpeath 2009-09-01
SELECT a,b,max(c) as c FROM table GROUP by a,b;
回复
YHL27 2009-09-01
sf!!
回复
dzxccsu 2009-09-01
[Quote=引用 2 楼 newbieeee 的回复:]
LS这个确实可行,但数据量太大,所需时间还是有些难以接受啊,请问有没有尽量不用group by 的方法?
[/Quote]你要用用distinct来排除相同的记录,又要选出C来,得用group by 才行,你可以建立索引试试,把C建为索引!
回复
newbieeee 2009-09-01
LS这个确实可行,但数据量太大,所需时间还是有些难以接受啊,请问有没有尽量不用group by 的方法?
回复
dzxccsu 2009-09-01

select *,count(distinct a,b) FROM table froup by a,b ORDER by c desc limit 0,10;

回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告