首页 > 数据库 >Mysql和Oracle在order by上关于聚合函数一些不同的差异

Mysql和Oracle在order by上关于聚合函数一些不同的差异

时间:2024-03-06 17:34:58浏览次数:19  
标签:聚合 PDTNO Mysql 子句 ORDER applySumCount Oracle order

1.问题

SELECT p.PDTNO, p.PDTNAME, sum(a.QUANTITY) AS applySumCount
FROM PRODUCT p 
JOIN APPLY a ON p.PDTNO = a.PDTNO 
GROUP BY PDTNO 
ORDER BY applySumCount DESC;

在Mysql中我们经常将select中聚合函数得到的结果起别名用于order by
但是同样的方式在Oracle中就不行,会报错:ORA-00918: 未明确定义列

2.解决

参考: 聚合函数是否可以写在order by后面,为什么?
在Group by/Order by/Where/ON子句中不能使用....
MySQL和Oracle在处理聚合函数在ORDER BY子句中的行为上存在一些差异。

在MySQL中,允许在ORDER BY子句中直接引用聚合函数的结果。这意味着你可以像你的查询那样直接使用applySumCount来排序结果。
而在Oracle中,ORDER BY子句不能直接引用聚合函数的结果。需要在这些子句中使用聚合函教的结果,可以使用子查询来解决

SELECT subquery.PDTNO, subquery.PDTNAME, subquery.applySumCount
FROM (
    SELECT p.PDTNO, p.PDTNAME, SUM(a.QUANTITY) AS applySumCount
    FROM PRODUCT p 
    JOIN APPLY a ON p.PDTNO = a.PDTNO 
    GROUP BY p.PDTNO, p.PDTNAME
) subquery
ORDER BY subquery.applySumCount DESC;

标签:聚合,PDTNO,Mysql,子句,ORDER,applySumCount,Oracle,order
From: https://www.cnblogs.com/trmbh12/p/18057090

相关文章

  • MySQL面试题
    MySQL隔离级别并发访问数据库时存在的问题脏读:又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改但是还未提交,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改并提交,这就导致了T2所读取到的数据是无效的,值得注意的是,脏读一般是针对于update操作的。不可重复读:是......
  • Oracle使用*的注意事项
    1.问题这里运行下述代码提示:ORA-00936:缺失表达式SELECT*FROM( SELECTROWNUMASrm,* FROM( SELECTprod_name,prod_price FROMPRODUCTS ORDERBYPROD_PRICEDESC )t1 WHEREROWNUM<=6 )t2WHERErm>3;2.解决参考:oracle查询*时所需......
  • IDEA连接MySQL
    打开IDEA右侧工具栏的数据库 添加MySQL  输入用户名和密码,连接   未完待续  本文记录软件实习的一些重要过程,方便以后查看,有不对的或者不懂的欢迎指正讨论......
  • MySQL下载安装
    参考教程https://www.bilibili.com/video/BV1PW421N7XB/?spm_id_from=333.337.search-card.all.click&vd_source=375e0493842b1c5315065fd44121c701  进入官网https://www.mysql.com/首页拉到最下面 选择语言可切换至中文版本 切换到下载界面 下拉点击社区版本......
  • MySQL 从库同步数据报错: Can't find record in '表名', Error_code: 1032; handler er
    由于两边数据不一致,主库host表的某条数据在从库不存在,导致同步时执行update报错。 修复的原理很简单,找到主从不一致的这条数据,在从库补上,让update能执行就好。由于需要从binlog里找数据,需要确保中断之后的binlog没被删除,否则就只能重搭了。导出日志:mysqlbinlog-v--stop-po......
  • MySQL JOIN 的执行过程
    对于MySQL的JOIN,不知道大家有没有去想过他的执行流程,亦或有没有怀疑过自己的理解;如果大家不知道怎么检验,可以试着回答如下的问题。 驱动表的选择:MySQL会如何选择驱动表,按从左至右的顺序选择第一个? 多表连接的顺序 假设我们有3张表:A、B、C,和如下SQL --伪SQL,......
  • Oracle with查询
    在Oracle数据库中,"WITH"子句通常用于编写递归查询或者子查询,并且可以在查询中创建临时的命名结果集。这样可以使得复杂的查询变得更加清晰和易于理解。WITH子句也被称为公共表表达式(CTE)。下面是一个简单的示例,演示了WITH子句的基本用法: witht1as(selecthostid,host,sta......
  • MySQL多表联查、分组查询每组最新的一条数据,并对某一字段进行条件统计
    起因本人在写查询的时候遇到了如题所述的要求,多次尝试无果(纯菜),最后发现“sql不会写?那就疯狂联表+堆子查询”。如果有更好的写法,也请在评论区赐教表信息如下equipment表:存储设备的名称等信息。其实这个表在接下来的查询中的作用,仅仅只是通过eq_id和其它表进行关联,然后查询到设备......
  • 关于安卓开发远程连接mysql数据库1
    一般关于安卓远程连接数据库通常有两种方法,一种就是直接通过安卓本身远程连接数据库,另一种是通过一个web服务中间层连接mysql(安卓向web发送请求,web实现对数据库的增删改查操作)。两种方法各有优缺点,取决于具体情况:直接连接:优点:直接连接MySQL数据库,可以实现高效的数据交互,减......
  • mysql没走索引原因分析(转)
    原文:https://juejin.cn/post/71149875593818603821、问题工作中,经常遇到这样的问题,我明明在MySQL表上面加了索引,为什么执行SQL查询的时候却没有用到索引?同一条SQL有时候查询用到了索引,有时候却没用到索引,这是咋回事?原因可能是索引失效了,失效的原因有以下几种,看你有没有踩过类......