码迷,mamicode.com
首页 > 数据库 > 详细

sql:group by和 max

时间:2016-01-23 07:49:57      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

通过group by,having,max实现查询出每组里指定列中最大的内容

例如:我需要实现的功能是

获取每个模块中点击量最大的内容(表中有许多内容,内容里)

我写的查询语句如下

 

技术分享

 

查询结果如下:

 

技术分享

 

然而在我的数据库中,共有5个mod,mod_id分别为1,2,3,4,15

 

技术分享

技术分享

 

查询结果自动忽略了mod_id=4的数据们。原因是mod_id=4的模块的最大点击量88不是第一个出现的mod_id=4的内容。其它的四个最大值都是自己模块中第一个出现的内容。

这说明我的查询语句有问题。

 

解决方案:

将一条查询语句分成两条查询语句

技术分享

 

 第一个查询语句取出每个mod中click_num的最大值和对应的mod_id,

然后在第二句里再查询,并将每次的查询结果附加到slice中。查询结果:

技术分享

如图,modID=4的结果查询出来了。

 

-----此处是分割线----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

不过由于一个Mod里的最大click_num可能不止一个,所以在上例中的第二句的查询方式最好使用QueryRows而不是QueryRow. hotcontent的类型也最好改为[]DtContent (DtContent是我定义的一个和数据库中的表相对应的struct),append也没法使用了,换成使用copy。。

技术分享

 

 

 

不过结果并不乐观,总是出现这种错误:

技术分享

 

 

(原来是我将copy(hotcontents,hotcontent)写成了copy[,],并不是见鬼了==!!!不过白白浪费许多时间,实在是粗心。)

 

不过hotcontents并没有如我愿不断变长,hotcontent的内容并没有复制到hotcontents里,生成结果里许多[] []都是hotcontents

技术分享

原因是:

技术分享

 

因为我通过 var hotcontents []DtContent声明的slice没有设置长度,这样hotcontent就复制不进去。因为我无法确信有多少hotcontent,所以我就依据每个模块*10来设置hotcontents的长度

技术分享

 

终于解决了,不过由于我声明的时候给的长度太大了,所以slice里有许多空值,耗费资源。

所以我希望能够动态的增加长度。

 

sql:group by和 max

标签:

原文地址:http://www.cnblogs.com/basque/p/5152694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!