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

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

时间: 2025-01-02 05:55:36

sql:group by和 max的相关文章

SQL GROUP BY 中的TOP N

一个示例表test(select * from test): id gid    age    username1 1      11     zhangsan2 1      13     zhangsan3 1      15     lisi4 1      10     wangwu5 2      20     liusanjie6 2      23     wumingshi7 1      10     hh 按gid分组取每组第一个数据的SQL: SELECT * FROM t

Linq to SQL -- Group By、Having和Exists、In、Any、All、Contains

Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:使用Group By按CategoryID划分产品. 说明:from p in db.Products 表示从表中将产品对象取出来.group p by p.CategoryID i

SQL GROUP BY 语句

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name SQL GROUP BY 实例 我们拥有下面这个 "Or

LINQ TO SQL ——Group by

原文:LINQ TO SQL --Group by 分组在SQL中应用的十分普遍,在查询,统计时都有可能会用到它.LINQ TO SQL中同样具备group的功能,这篇我来讲下LINQ TO SQL中关于group的用法. 说明: 1:group 不一定要用到多表查询中,单表查询也是可以的. 2:基本语法: 1>:group 分组后要取的字段或者是对象; 2>:by 分组对象,可以是一列也可以是多列: 3>:into 结果集对象. 3:group的分类,这里分为单列分组,和多列分组.  

SQL Group By 子句详解

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name SQL GROUP BY 实例 我们拥有下面这个 "Or

LINQ to SQL Count/Sum/Min/Max/Avg Join

public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/Max/Avg // Count public void Count() { // 说明:返回集合中的元素个数,返回 INT 类型:不延迟.生成 SQL 语句为: SELECT COUNT(*) FROM //简单形式 性能差 var count = Db.MXSMemeber.Count(); /

SQL-W3School-函数:SQL GROUP BY 语句

ylbtech-SQL-W3School-函数:SQL GROUP BY 语句 1.返回顶部 1. 合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value

SQL group by分组查询(转)

本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳信息类型,以汇总相关数据.GROUP BY的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理. 在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用

SQL group by分组查询

本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳信息类型,以汇总相关数据.GROUP BY的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理. 在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用