zoukankan      html  css  js  c++  java
  • sql:group by和 max

    通过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里有许多空值,耗费资源。

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

  • 相关阅读:
    线程的取消/撤销 (转)
    Linux 3.0发布有感(转)
    Linux下挂载与解除挂载U盘
    Ubuntu 中文编码设置
    Linux Kernel 3.0新特性概览(转)
    pthread_cond_wait()用法分析
    brk和sbrk及内存分配函数介绍
    [转]Vmware ESX 4上虚拟机 Redhat 5.2(CentOS 5.2)启动在Starting udev 停几个小时
    [贺]通过Oracle 10g OCP的三门考试
    [原]Oracle外部表结合游标完成统计一例
  • 原文地址:https://www.cnblogs.com/basque/p/5152694.html
Copyright © 2011-2022 走看看