MySQL、SQLServer、Oracle 分组排序

  1. MySQL:

1.聚集函数:max(),min(),avg(),sum(),count()
在分组上应用聚集函数。
2.聚合函数对应于每组的数据:即max(id) 每组最大的id
3.having 是group by分组后的结果集再加的条件(having相当于Where 但只能在group by后,条件可以是聚合函数(真实表中可能不存在的数据))。

例如:

SELECT
    * 
FROM
    tb_chatlog 
WHERE
    chatid IN ( 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
    (
SELECT
    ROW_NUMBER ( ) over ( PARTITION BY LoginUser, BuyerName ORDER BY ChatTime DESC ) rowNums,* 
FROM
    tb_chatlog 
WHERE
    LoginUser = '丰达盛伟服饰专营店' 
    AND ChatTime >= '2019-07-07 00:00' 
    AND ChatTime <= '2019-07-17 23:59' 
    AND Direction = '0' 
    ) subGroup 
WHERE
    rowNums = '1';
复制代码

3. Oracle:

 

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<TO_DATE('2015-9-07 00:00:00','yyyy-mm-dd hh24:mi:ss'))

where rk=1

row_number() OVER(PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
---------------------
参考:https://blog.csdn.net/xcymorningsun/article/details/52754065

本文作者:好Wu赖

本文链接:https://www.cnblogs.com/erlongxizhu-03/p/11248401.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   好Wu赖  阅读(921)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起