Mysql中的一些常考知识

  1. 窗口函数的位置可以放置以下两种函数:

1>专用窗口函数,包括rownumber(); rank(); denserank()等(后文以这3个为例介绍)。

  • rank() 如果有并列名次的行,占用下一名次的位置;
  • dense_rank() 如果有并列名次的行,顺次排列,不占用下一名次的位置;
  • row_number() 顺次排序,不考虑并列名次问题。

partition by 和 group by的区别:
group by只能得到分组后的统计数据(即每组一条数据),over (partition by)不仅可以得到分组后的统计数据,还可以显示明细数据(即可以显示每组下的各成员内容)。

mysql聚合每个小时 mysql中聚合函数包括rank_mysql

2 >聚合函数,如sum, avg, count, max, min等。

基本语法:

<窗口函数> OVER (PARTITION BY <用于分组的列名> ORDER BY <用于排序的列名>);
-- over关键字用于指定函数的窗口范围,
-- partition by 用于对表分组,
-- order by子句用于对分组后的结果进行排序。

mysql聚合每个小时 mysql中聚合函数包括rank_mysql聚合每个小时_02

rank()

将每个班按成绩排名

SELECT *,rank() OVER (PARTITION BY 班级 ORDER BY 成绩 DESC) AS ranking FROM 班级表;

mysql聚合每个小时 mysql中聚合函数包括rank_mysql_03

dense_rank(),row_number()的用法及与rank()的区别

SELECT *,rank() OVER (ORDER BY 成绩 DESC) AS ranking,
         dense_rank() OVER (ORDER BY 成绩 DESC) AS dense_rank,
         row_number() OVER (ORDER BY 成绩 DESC) AS row_number FROM 班级表;

mysql聚合每个小时 mysql中聚合函数包括rank_数据_04

2.sql中聚合函数

MAX MIN SUM AVG COUNT VAR(返回给定表达式中所有值的统计方差) VARP(返回给定表达式中所有值的填充的统计方差) COUNT_BIG(返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。)

3.where和having的区别

1)区别

having是在分组后对数据进行过滤
where是在分组前对数据进行过滤
having后面可以使用聚合函数
where后面不可以使用聚合函数

2)sql语句执行顺序

mysql聚合每个小时 mysql中聚合函数包括rank_数据_05

4.怎么筛选出A表没有而B表有的数据

select A.ID from A left join B on A.ID=B.ID where B.ID is null

5.left join后面用on和where的区别

1)on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2)where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

6.DQL、DML和DDL的区别

DQL(Data Query Language)数据查询语言:

适用范围:对数据库中的数据进行查询操作,select

DML(Data Manipulation Language)数据操纵语言:

适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update等.

主要指数据的增删改:insert delete update

DDL(Data Definition Language)数据定义语言:

适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.
建库、建表、设置约束