1. MySQL:
1.聚集函数:max(),min(),avg(),sum(),count()
在分组上应用聚集函数。
2.聚合函数对应于每组的数据:即max(id) 每组最大的id
3.having 是group by分组后的结果集再加的条件(having相当于Where 但只能在group by后,条件可以是聚合函数(真实表中可能不存在的数据))。
例如:
SELECT
*
FROMtb_chatlogWHEREchatidIN ( SELECT max( Chatid ) maxId FROM tb_chatlog WHERE LoginUser = '*******' GROUP BY LoginUser, BuyerName );
select 后可以出现任意字段,并不是非得分组的字段。
分组字段越多,数据越少,分组排序一般都是获取组内排序后的某个值(最大id值),这是可以合理分配分组字段和聚合函数得到最大id集合,再根据子查询即可取得所需数据结果集。
2. SQLServer:
SQLserver 分组查询:
函数:ROW_NUMBER ( ) over
SQLserver中:group by 后的字段,在select 后可以出现,不在group by 的字段在select 只能使用聚合函数。
SELECT
*
FROM(SELECTROW_NUMBER ( )over ( PARTITION BY LoginUser, BuyerName ORDER BY ChatTime DESC ) rowNums,*
FROMtb_chatlogWHERELoginUser= '丰达盛伟服饰专营店'
AND ChatTime >= '2019-07-07 00:00'
AND ChatTime <&#61; &#39;2019-07-17 23:59&#39;
AND Direction &#61; &#39;0&#39;) subGroupWHERErowNums&#61; &#39;1&#39;;
3. Oracle&#xff1a;
select * from(
select t.*, row_number() over(partition byF_ATTRACTIONID order by F_TIME desc ) rk from T_ATTRACTION_CG t WHERE t.F_TIME
where rk&#61;1
row_number() OVER(PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组&#xff0c;在分组内部根据 COL2排序&#xff0c;而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
---------------------
参考&#xff1a;https://blog.csdn.net/xcymorningsun/article/details/52754065