首页 > 数据库 >Mysql和Oracle在group by中的一些差异

Mysql和Oracle在group by中的一些差异

时间:2024-03-06 17:55:35浏览次数:26  
标签:group PDTNO sum Mysql t1 applySumCount Oracle GROUP SELECT

1.是否select字段需要全部出现?

Oracle中出现在select列表中的字段或者出现在order by后面的字段,如果不是包含在分组函数中,那么该字段必须同时在group by子句中出现。
Mysql没有此限制
例:
Mysql中,以下SQL语句是成立的,可见这里的Group by

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 sum(a.QUANTITY) DESC;

Oracle中,这样的行为则会提示ORA-00979: 不是 GROUP BY 表达式
必须写成: GROUP BY p.PDTNO, p.PDTNAME 才可以

SELECT t1.pdtno, t1.pdtname, t1.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
	)t1
ORDER BY t1.applySumCount DESC;

准确来说,这是SQL标准里面严格语法和宽松语法的区别
参考: 神奇的 SQL 之层级 → 为什么 GROUP BY 之后不能直接引用原表中的列

2.Mysql中group by可以使用别名,Oracle 中不可以

如下:
Mysql中:像这样在Group by中使用别名是可以的

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

但是在ORacle中,使用别名会报错:ORA-00904: "PDN": 标识符无效

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

标签:group,PDTNO,sum,Mysql,t1,applySumCount,Oracle,GROUP,SELECT
From: https://www.cnblogs.com/trmbh12/p/18057186

相关文章

  • Mysql和Oracle在order by上关于聚合函数一些不同的差异
    1.问题SELECTp.PDTNO,p.PDTNAME,sum(a.QUANTITY)ASapplySumCountFROMPRODUCTpJOINAPPLYaONp.PDTNO=a.PDTNOGROUPBYPDTNOORDERBYapplySumCountDESC;在Mysql中我们经常将select中聚合函数得到的结果起别名用于orderby但是同样的方式在Oracle中就不行,......
  • 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和其它表进行关联,然后查询到设备......
  • odoo group by 汇总功能
    汇总字段属性有哪些:#validSQLaggregationfunctionsVALID_AGGREGATE_FUNCTIONS={'array_agg','count','count_distinct','bool_and','bool_or','max','min','avg','su......