总结:1,在where子句中不能用分组聚合函数. 2,如果没有group by 子句,select 不能同时出现字段与分组的聚合函数. 3,在有 group by 的子句的查询中,select 查询的列 要么出现在group By 子句中的字段. 要么列出现在聚合函数中. 4,where 与 having 的区别. where的作用是在分组之前过滤不符合条件的记录. 5,having的作用是在分组后记录的过滤. 6,聚合
注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里. 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要) 例如,有如下数据库表: A B 1 abc 1 bcd 1 asdfg 如果有如下查询语句(该语句是错误的,原因见前面的原则) select A,B fr
高级排序函数: [ ROW_NUMBER()| RANK() | DENSE_RANK ] OVER (partition by xx order by xx) 1.row_number() 连续且递增的数字 1 2 3 4 row_number() over (partition by xx order by xx ) --学生表中按照所在专业分组,同专业内按成绩倒序排序,成绩相同则按学号正序排序,并给予组内等级select row_number() over(partition b
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用oracle用户登录linux [oracle@localhost ~]$ sqlplus / as sysdba; ...... SQL> alter user scott account unlock: 四大语句 DQL语句--select DML语句--insert,upate,delete等(关键
Demo: SELECT USER_ID, USER_NAME, USER_SEX, MAX(USER_AGE), SUM(USER_MONEY) AS USER_MONEY USER_TEL, USER_EMAIL, USER_ADD, USER_STATUS, FROM USERS ORDER BY USER_NAME, USER_SEX, USER_STATUS; 类似这种,多个字段的GROUP BY该怎么写. 1.USER_TEL, USER_EMAIL, U
--1 数据环境准备 scott 用户下面的emp,dept表 --2 要求 :求平均工资最高的部门编号,部门名称,部门平均工资 select d.deptno,d.dname,e.salfrom(select avg(sal) sal,deptnofrom emp egroup by deptnohaving avg(sal) = (select max(avg(sal)) from emp group by deptno))eleft join dept don e.deptno=d.dep
Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错:“ORA-00979: not a GROUP BY expression”.而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确.所以,作者建议在写SQL语句的时候,
先上例了: select job as "JOB1", avg(sal) as "avg sal" from scott.emp group by "JOB" having avg(sal) > 1500 and "JOB1" = 'MANAGER' order by "avg sal" ; -- 执行报错,ORA-00904:"JOB1":标识符无效 select job as
分组函数:(五个) 1···max(expr):求expr的最大值 }\ 2···min(expr):求expr的最小值 }-- 数据类型是有规定的 3···sum(expr):求expr的总和 }-- 必须是字符型或数字 4···avg(expr):求expr的平均值 }/ 5···count(expr):求expr的个数 expr的类型不能是空,如果是空,则不计入其中, 因此需要用到nvl()来进行转换 group by expr1,expr2,...的用法: group by 的后面跟的是
2018-07-10 08:29:55 思考应用场景 异常数据的测试 6.显示能挣得奖金的雇员的姓名.工资.奖金,并以工资和奖金降序排列.select ename,sal,commfrom empWHERE comm>0--两列都要descorder by sal desc,comm desc; 8. 显示姓名中两次出现字母L并且在30部门工作,或者其管理员编号是7782的雇员的姓名.SELECT ename FROM emp --模糊查询WHERE ename LIKE '%L%L%' AND