免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6052 | 回复: 12
打印 上一主题 下一主题

求一个分组的sql语句。试了很长时间,没有好方法以。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-10 17:32 |只看该作者 |倒序浏览
5可用积分
求一个分组的sql语句。试了很长时间,没有好方法。
对id和a进行分组,求b是最小的那条记录,并且要统计行数。
希望能写出好的语句,谢谢大家。
表:
id a b ....(很多字段)
1 1 3
1 1 1
1 2 2
1 2 4
2 1 1
2 1 3
2 2 2
2 2 4

得出
id a b .... count
1 1 1 .... 2
1 2 2 .... 2
2 1 1 .... 2
2 2 2 .... 2

[ 本帖最后由 hh11 于 2007-9-10 17:37 编辑 ]

最佳答案

查看完整内容

4楼的已经是比较好的解决方案了,再要优化的话,只能打临时表的主意了。

论坛徽章:
0
2 [报告]
发表于 2007-09-10 17:32 |只看该作者
4楼的已经是比较好的解决方案了,再要优化的话,只能打临时表的主意了。

论坛徽章:
0
3 [报告]
发表于 2007-09-10 20:31 |只看该作者
group by一下子就搞定了

论坛徽章:
0
4 [报告]
发表于 2007-09-10 21:03 |只看该作者
版主的回答有问题哦,
select id,a,min(b),......,count(1) from table group by id,a
虽然取得的记录中b是最小的,但其他字段的内容,不是最小的那条记录的值。

论坛徽章:
0
5 [报告]
发表于 2007-09-10 21:20 |只看该作者
select t1.*,t2.ct from table t1 join(
select id,a,min(b) as b,count(1) as ct from table group by id,a
)  t2 on t1.id=t2.id and t1.a=t2.a and t1.b=t2.b

这个语句可以实现,还有没有更好的办法。

论坛徽章:
0
6 [报告]
发表于 2007-09-10 21:35 |只看该作者
mysql> select * from t1;
+------+------+------+
| id   | a    | b    |
+------+------+------+
|    1 |    1 |    3 |
|    1 |    1 |    1 |
|    1 |    2 |    2 |
|    1 |    2 |    4 |
|    2 |    1 |    1 |
|    2 |    1 |    3 |
|    2 |    2 |    2 |
|    2 |    2 |    4 |
+------+------+------+
8 rows in set (0.01 sec)

mysql> select t1.id,t1.a,min(t1.b),t2.num from t1 left join (select id,a,count(b) num from t1 group by id,a)t2 on t1.id=t2.id group by t1.id,t1.a;
+------+------+-----------+------+
| id   | a    | min(t1.b) | num  |
+------+------+-----------+------+
|    1 |    1 |         1 |    2 |
|    1 |    2 |         2 |    2 |
|    2 |    1 |         1 |    2 |
|    2 |    2 |         2 |    2 |
+------+------+-----------+------+
4 rows in set (0.02 sec)

mysql>

论坛徽章:
0
7 [报告]
发表于 2007-09-10 22:02 |只看该作者
回复llsx,谢谢你。
你的语句表面上实现了结果,但实质是错误的。你把字段再增加几个,再把记录多增加几条就知道了。

论坛徽章:
0
8 [报告]
发表于 2007-09-10 22:09 |只看该作者
在这个基础上根据你的具体情况修改一下就可以了

论坛徽章:
0
9 [报告]
发表于 2007-09-10 22:10 |只看该作者
用关键分组,再left join就可以了

论坛徽章:
0
10 [报告]
发表于 2007-09-10 22:17 |只看该作者
问题是选出的最小的那条记录,其他字段的值应该是对应的值(省略号部分字段)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP