2021-4-14-数据库篇

一:mysql里面的count用法

count的基本用法:获取括号内符合条件的结果条数。
1:count(*):包括所有列,返回表的记录数,同时会把列的值为null的记录也统计进去。
2:count(列名):只包括指定列对应的记录数,并且统计的时候,会把列的值为null的记录忽略,只统计有值的情况(空字符和0都属于有值)。
3:count(1):1只是一个随意的固定值,表示忽略所有列,在统计结果的时候,会把列是null的记录也统计进去。
4:count(distinct 列名):只包括指定列对应的记录数,同时对返回的结果进行去重。得到的结果为指定列且值非空并且不同的记录总数。

https://www.cnblogs.com/kylinxxx/p/14008826.html
count()&count(1)&count(列名)执行效率比较:
(1)如果列为主键,count(列名)效率优于count(1)
(2)如果列不为主键,count(1)效率优于count(列名)
(3)如果表中存在主键,count(主键列名)效率最优
(4)如果表中只有一列,则count(
)效率最优
(5)如果表有多列,且不存在主键,则count(1)效率优于count(*)
特例:select count(0) from table;-返回表的记录数

二:本地调用mysql查询列和Max(列)的组合,报错

SELECT list is not in GROUP BY clause and contains nonaggregated column ‘test.atest.name’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

百度一波之后,发现mysql默认情况下是启用列only_full_group_by 的SQL模式,就是可以单独查询聚合函数结果,比如max(hour),也可以单独查询某一列的值,但是不能
select max(hour),name,tableid from atest group by tableid;
可以先查看下本机sql_mode内容是否确实启用列only_full_group_by.

mysql>show session variables;
mysql>show global variables;
select @@sql_mode;

上面的命令就是可以查看当前session和global下的sql_mode的值的情况。
操作:直接取出当前的值,取出“only_full_group_by"的属性之后,重新赋值

mysql> set global sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;
mysql> set session sql_mode=‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’;

再尝试一下,发现就可以了。
此处解决方法,取自:

https://www.cnblogs.com/jpfss/p/10068487.html

todo:了解服务端测试具体怎么样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值