分组函数
多段排序:
select ename,sal from emp order by sal,ename;
跟着谁最近先排谁
根据字段的位置也可以排序
按照查询结果的第几列来排
比如select ename,sal from emp order by 2;
就是按照sal来排序
mysql> select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
+--------+---------+
| ename | sal |
+--------+---------+
| SCOTT | 3000.00 |
| FORD | 3000.00 |
| JONES | 2975.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| ALLEN | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| WARD | 1250.00 |
| MARTIN | 1250.00 |
+--------+---------+
单行处理函数:
1.特点:一个对应输入对应一个输出,相对于多行处理函数
大写变小写
select lower(ename) from emp;但是他的名字就变了,需要我们搞一个as上来
substr取子串,起始下标从1开始没有0这一说
select substr(ename , 1 , 1) = 'A' as ename from emp;
相比于
select ename from emp where substr(ename , 1 , 1) = 'A' ;
concat函数字符串拼接 挨着select
首字母大写
select concat(upper(substr(name,1,1)),substr(name,2,length(ename) - 1)) as ans from emp;
trim 去空格
select * from emp where ename = ' KING ';
里面有空格是查不到的
select * from emp where ename = trim(' KING ');
是可以删除里面的空格查到的
基本上都是在字段直接加小括号,但是substr是在where里面的
如果是‘abc’会根据你的表结构都变化成abc
+-----+
| abc |
+-----+
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
| abc |
+-----+
14 rows in set (0.00 sec)
四舍五入:round
mysql> select round(12345.666,0) from emp;
+--------------------+
| round(12345.666,0) |
+--------------------+
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
| 12346 |
+--------------------+
14 rows in set (0.00 sec)
mysql> select round(12345.666,-1) from emp;
+---------------------+
| round(12345.666,-1) |
+---------------------+
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
| 12350 |
+---------------------+
14 rows in set (0.00 sec)
mysql> select round(12345.666,-2) from emp;
+---------------------+
| round(12345.666,-2) |
+---------------------+
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
| 12300 |
+---------------------+
14 rows in set (0.00 sec)
生成随机数
mysql> select rand()+ 1 from emp;
+--------------------+
| rand()+ 1 |
+--------------------+
| 1.7697533646316765 |
| 1.1944291258178923 |
| 1.662885565928077 |
| 1.731140482920353 |
| 1.6670457475511782 |
| 1.1418073197284782 |
| 1.7078993867225007 |
| 1.1140750051607144 |
| 1.4466768963697152 |
| 1.8911594971000771 |
| 1.115766827124885 |
| 1.9053556750578393 |
| 1.1794779246481861 |
| 1.1813226288010577 |
+--------------------+
14 rows in set (0.00 sec)
case.. when.. then..when..then..else..end
比如说if else
分组函数(多行处理)
输入多行,最终输出一行
五个:
count计数
sum求和
avg
max
min
必须先进行分组才能用
1.分组函数自动忽略NULL
*count!!! NULL什么也没有
2.count(具体字段):统计字段下所有不为NULL的函数
count(*):也是这个意思,但是肯定每行都有一定的数据,没有数据肯定没有这个行,所以不id
3. 分组函数不能直接用在where语句中,
可以说分组函数直接有条件了,
4.所有的分组函数可以组合起来
分组查询:(重点嗷嗷)
select from group by

浙公网安备 33010602011771号