oracle主要用到的函数:OVER(PARTITION BY)

mysql主要用到的函数:LIMIT

(用到3个地方:分组列、组内排序列、表名)

oracle

select t.*
from 
    (
        select a.*, ROW_NUMBER() OVER (PARTITION BY 分组列 ORDER BY 组内排序列 DESC) rn 
        from 表名 a
    ) t 
where t.rn = 1

 select t.* from (
    select a.*, ROW_NUMBER() OVER (PARTITION BY 分组列 ORDER BY 组内排序列 DESC) rn_001 
    from 表名 a
) t where t.rn_001 = 1

 

mysql:

第一种:

先排序,再分组。

SELECT * 
FROM
(
    SELECT * 
    FROM 表名 
    ORDER BY 组内排序列 DESC 
    LIMIT 10000
) a 
GROUP BY 分组列

 mysql5.7中,子查询排序默认失效,用limit来恢复排序。
另:

   oracle中,select部分出现group by部分,以外的列,会报错,要不就得用聚合函数包裹列。
   mySQL中,默认取了第一条,所以可以这样写。

 

第二种:

先通过聚合函数查出某几列的数据,再自连接查出其他列。

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐