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

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

  • 相关阅读:
    c/c++ 网络编程 getaddrinfo 函数
    c/c++ 网络编程 bind函数
    c/c++ socket API 调用后的错误判断 perror errno
    python基础-面向对象编程之反射
    彻底理解Future模式
    Java并发编程:Callable、Future和FutureTask
    java异步调用方法
    理解ThreadLocal
    ReentrantReadWriteLock读写锁
    java锁优化
  • 原文地址:https://www.cnblogs.com/basque/p/5152694.html
Copyright © 2020-2023  润新知