1.order by
(1)mysql对于执行顺序比较靠后的语句,如果出错了就不执行,而且不报错。
(2)按照查询出来的字段的别名排序也是可以的,不管别名是中文还是英文,只要不加单引号就行。
(3)ORDER BY 仅能处于SELECT语句的末尾.
补充:having后面跟的中文别名也不用加引号.
2.数据为空时候,count,sum返回结果不同
count返回值为0,sum返回值为空,使用的时候要进行简单的处理。
count函数只会对expr不为null的数据进行统计。
3.聚合函数使用
不能在 WHERE 子句中使用聚合函数。
可以在 HAVING 子句中使用聚合函数。
解释:因为聚合函数是对查询出来的结果集运算的,当在where子句使用聚合函数时,此时根据group by 分割结果集的子句还没有执行,此时只有from 后的结果集。所以无法在where子句中使用聚合函数。
4.分组函数
分组函数基本不计算null值。假如我们想要那些为null的也计入有效结果怎么办呢?很简单!使用IFNULL函数!
5.窗口函数row_number(),rank(),dense_rank()
在经典45题16题时使用rank() over(order by …)时报错
疑问点:
①rank() over(order by …)的使用位置是否在from之前
②如果要进行排名的字段是统计函数或者其他子查询的字段呢
语句如下:
1 | select \*,RANK()over(order by '总分' desc)排名 from( |
6.流程控制函数
case函数只返回第一个符合条件的值,剩下的case部分会被忽略
7.日期函数
now返回当前系统日期+时间
curdata返回当前日期,不包含时间
curtime返回当期时间,不包含日期
year/month/data:select year (curdata())
str_to_data:将日期格式字符转换为指定格式日期
data_format:将日期转化为字符
参考:https://blog.csdn.net/ZZQHELLO2018/article/details/92766462