请教条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语句应该如何写?因为数据量比较大,请考虑下效率。
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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;

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧