mysql length函数null_MySQL的几个length函数以及聚合函数对于NULL的处理

数据库基于MySQL,其他数据库有些不一样

最近跟着CSDN上的一位博主的MySQL系列文章学习了下,做下笔记复习巩固下。

length函数:

char_length:字符个数

length:字节个数

bit_length:二进制个数

mysql> select length('a'),char_length('a'),bit_length('a');+-------------+------------------+-----------------+

| length('a') | char_length('a') | bit_length('a') |

+-------------+------------------+-----------------+

| 1 | 1 | 8 |

+-------------+------------------+-----------------+

1 row in set (0.00sec)

mysql> select length('啊'),char_length('啊'),bit_length('啊');+---------------+--------------------+-------------------+

| length('啊') | char_length('啊') | bit_length('啊') |

+---------------+--------------------+-------------------+

| 3 | 1 | 24 |

+---------------+--------------------+-------------------+

1 row in set (0.00 sec)

聚合函数对于NULL

COUNT(*):会对所有的NULL计数,

COUNT(1):会对所有的NULL计数,

COUNT(某列):会忽略所有的NULL,

COUNT(NULL):返回0

SUM():会忽略NULL

MAX():忽略NULL

MIN():忽略NULL

AVG():忽略NULL

上面这4个都会忽略null比较好理解:毕竟NULL无法参与计数,但是要注意是忽略NULL而不是把NULL当成0,通过这个就能说明:

mysql> select avg(v) fromtest_count;+--------+

| avg(v) |

+--------+

| 1.5000 |

+--------+

1 row in set (0.04sec)

mysql> select * fromtest_count;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

+------+

3 rows in set (0.00sec)

#平均数结果是1.5,所以能证明除以的是2而不是3,能证明NULL被忽略了

group by:这个以前我还没注意,NULL列会在查询之后放在最前面

mysql> select * fromtest_count;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

+------+

3 rows in set (0.00sec)

mysql> select * from test_count group byv;+------+

| v |

+------+

| NULL |

| 1 |

| 2 |

+------+

3 rows in set (0.01 sec)

order by:NULL会被认为是最小值 (工作需要,用了postgresql,order by ,null会在最后,order by desc,null在最前面)

mysql> select * from test_count order byv;+------+

| v |

+------+

| NULL |

| -128 |

| 1 |

| 2 |

+------+

4 rows in set (0.00 sec)

distinct:NULL会被消重

mysql> select distinct * fromtest_count;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

| -128 |

+------+

4 rows in set (0.02sec)

mysql> select * fromtest_count;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

| -128 |

| NULL |

| NULL |

+------+

6 rows in set (0.00 sec)

+:与NULL相加结果都为NULL

mysql> select * fromtest_count;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

| -128 |

| NULL |

| NULL |

+------+

6 rows in set (0.00sec)

mysql> select 1+v fromtest_count;+------+

| 1+v |

+------+

| 2 |

| 3 |

| NULL |

| -127 |

| NULL |

| NULL |

+------+

6 rows in set (0.00 sec)

,<>,=:与NULL比较都返回NULL,需要用is null 或者not null

is null和is not null:结果为真返回1,结果为假返回0

mysql> select 0v,0<>v,0=v,v is null, v is not null fromtest_count;+------+------+------+------+-----------+---------------+

| 0v | 0<>v | 0=v | v is null | v is not null |

+------+------+------+------+-----------+---------------+

| 1 | 0 | 1 | 0 | 0 | 1 |

| 1 | 0 | 1 | 0 | 0 | 1 |

| NULL | NULL | NULL | NULL | 1 | 0 |

| 0 | 1 | 1 | 0 | 0 | 1 |

| NULL | NULL | NULL | NULL | 1 | 0 |

| NULL | NULL | NULL | NULL | 1 | 0 |

+------+------+------+------+-----------+---------------+

6 rows in set (0.03sec)

mysql> select * fromtest_count;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

| -128 |

| NULL |

| NULL |

+------+

6 rows in set (0.00 sec)

如果想统计NULL一共有多少行行,可以使用if函数:

mysql> select sum(if(v is null, 1, 0)) NULL一共多少行 fromtest_count;+---------------------+

| NULL一共多少行 |

+---------------------+

| 4 |

+---------------------+

1 row in set (0.03sec)

mysql> select sum(if(v is null, 0, 1)) 非NULL一共多少行 fromtest_count;+------------------------+

| 非NULL一共多少行 |

+------------------------+

| 3 |

+------------------------+

1 row in set (0.00sec)

mysql> select * fromtest_count; unt;t;+------+

| v |

+------+

| 1 |

| 2 |

| NULL |

| -128 |

| NULL |

| NULL |

| NULL |

+------+

7 rows in set (0.00 sec)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值