MySQL之聚合数据(AVG,COUNT,MAX,MIN,SUM)

1.首先我们需要了解下什么是聚合函数

聚合函数aggregation function又称为组函数。 认情况下 聚合函数会对当前所在表当做一个组进行统计。

2.聚合函数的特点

1.每个组函数接收一个参数(字段名或者表达式) 统计结果中默认忽略字段为NULL的记录

2.要想列值为NULL的行也参与组函数的计算,必须使用IFNULL函数对NULL值做转换。

3.不允许出现嵌套 比如sum(max(xx))

3.聚合函数 count(),求数据表的行数

1
select count(*/字段名) from 数据表

4.聚合函数 max(),求某列的最大数值

1
select max(字段名)from 数据表

5.聚合函数min(),求某列的最小值

1
select main(字段名) from 数据表

6.聚合函数sum(),对数据表的某列进行求和操作

1
select sum(字段名) from 数据表

7.聚合函数avg(),对数据表的某列进行求平均值操作

1
select avg(字段名) from 数据表

8.聚合函数和分组一起使用

1
select count(*),group_concat(age) from students group by age;

总结:

MySQL的聚合函数和我们日常office表使用的一些对表的操作的方法大致相同,在工作中主要配合分组使用

=====================================================

一、聚合函数(aggregation function)—也就是组函数

在一个行的集合(一组行)上进行操作,对每个组给一个结果。

常用的组函数:

AVG([distinct] expr)

求平均值

COUNT({*|[distinct] } expr)

统计行的数量

MAX([distinct] expr)

求最大值

MIN([distinct] expr)

求最小值

SUM([distinct] expr)

求累加和

①每个组函数接收一个参数

②默认情况下,组函数忽略列值为null的行,不参与计算

③有时,会使用关键字distinct剔除字段值重复的条数

注意:

1)当使用组函数的select语句中没有group by子句时,中间结果集中的所有行自动形成一组,然后计算组函数;

2)组函数不允许嵌套,例如:count(max(…));

3)组函数的参数可以是列或是函数表达式;

4)一个SELECT子句中可出现多个聚集函数。

table test

Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
name char(50) NO NULL
age int(11) NO NULL
school char(50) YES NULL

(一)AVG()函数
AVG()通过对表中行数计数并计算特定列值之和,从而求得该列的平均值。

例如:SELECT AVG(age) AS avg_age FROM test;

此语句返回表test中所有age的平均值。

例如:SELECT AVG(age) AS avg_age FROM test WHERE name=”john”;

此语句返回表test中name=john的age的平均值。

注:AVG只能确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个avg函数。而且avg函数会忽略列值为NULL的行。

(二)COUNT()函数
COUNT()函数进行计数。可利用COUNT()函数确定表中行的数目或者符合特定条件的行的数目。

COUNT()有两种使用方式:

1.使用COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。

2.使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

例如 SELECT COUNT(*) AS num_test FROM test;

此语句对表test所有行进行计数,返回表的总行数,不管行中各列有什么值。

例如 SELECT COUNT(school) FROM test;

此语句只对school列中有值的行进行计数,忽略null行。

(三)MAX()函数
MAX()函数返回指定列中的最大值。MAX()要求指定列名。

例如SELECT MAX(age) FROM test;

此语句返回表test中age的最大值。

注:MAX()函数忽略值为NULL的行。

(四)MIN()函数
MIN()函数返回指定列的最小值,MIN()要求指定列名。

例如 SELEC MIN(age) FROM test;

此语句返回最小的age值。

注:MIN()函数忽略列值为NULL的行。

(五)SUM()函数
SUM()函数来返回指定列值的和(总计)。

SELECT SUM(age)FROM test;

此语句返回age列所有值之和。

注:SUM函数忽略列值为NULL的行。SUM也可以用来合计计算值,SUM(price*count)。

(六)聚集不同值
对以上5个聚集函数都可以如下使用:

1.对所有行执行计算,指定ALL参数或者不给参数(ALL参数是默认的)

2.只包含不同的值,指定DISTINCT参数

例如SELECT AVG(DISTINCT age) FROM test;

此语句返回age值不同的所有age值的平均值。

注:DISTINCT只能用在列名前面,不能用在表达式前。

https://www.cnblogs.com/panchanggui/p/10652334.html

zip 压缩 排除

//排除
zip -r liu.zip * -x “bdimages/*”

//排除多个
zip -r web1.zip * -x “images/*” -x “data/afficheimg/*” -x “m/img/*” -x “data/refund_log/*” -x “themes/gwbn_v2/gwbn_img/*” -x “orders/kz/*”
//查询最近修改的文件
find . -path ‘./temp’ -prune -o -name ‘*.php’ -mtime 0 -print

grant select,insert,update,delete on laidian.* to laidian@”%” identified by “laidian123456”;

宝塔 PHP7.2 安装pdo_sqlsrv扩展 TP5对接SQLServer数据库

前排提示,本教程基于centOS7.6+宝塔最新版本,gcc组件为4.8版本
实测在centOS6.8+宝塔(pytohn2版本)环境下,由于gcc组件是4.4版本,会造成安装失败,请谨慎操作
SQLServer 实际上是 mssql,想要使用 thinkphp 的 Db 对象操作数据库前必须要在服务器上安装对应的扩展。

宝塔面板的 PHP 安装路径为 /www/server/php/ 且支持多个 PHP 版本共存,所以安装 PHP 扩展的方法与网上那些示例略有不同

下面是 PHP7.2 安装 pdo_sqlsrv5.6.0 扩展的过程。( pdo_sqlsrv 扩展目前最新的版本可以通过此网址查看 http://pecl.php.net/package/pdo_sqlsrv)

#加入微软的源
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo

#安装驱动
yum install -y msodbcsql mssql-tools unixODBC-devel

#下载pdo_sqlsrv扩展包
wget http://pecl.php.net/package/pdo_sqlsrv wget http://pecl.php.net/get/pdo_sqlsrv-5.6.0.tgz
tar -zxvf pdo_sqlsrv-5.6.0.tgz
cd pdo_sqlsrv-5.6.0

#使用对应php版本的phpize
/www/server/php/72/bin/phpize
./configure –with-php-config=/www/server/php/72/bin/php-config

#编译
make && make install

#加入扩展
echo “extension = pdo_sqlsrv.so” >> /www/server/php/72/etc/php.ini

#重启php7.2
/etc/init.d/php-fpm-72 reload

#检查扩展是否安装成功
/www/server/php/72/bin/php -m|grep -i sqlsrv
TP5 使用 Db 对接 SQLServer 数据库

public function sqltest()
{
$sql = ‘select * from show_all_student’;
$mssql = Db::connect([
// 数据库类型
‘type’ => ‘sqlsrv’,
// 服务器地址
‘hostname’ => ‘10.168.10.75’,
// 数据库名
‘database’ => ‘test’,
// 数据库用户名
‘username’ => ‘sa’,
// 数据库密码
‘password’ => ‘sa’,
// 数据库连接端口
‘hostport’ => ‘1433’,
// 数据库编码默认采用utf8
‘charset’ => ‘utf8’,
]);
$result = $mssql->query($sql);
dump($result);
}

————————————————
版权声明:本文为CSDN博主「小白白友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BoYou233/article/details/115011661

linux下查看php是否启动&重启php&杀死php进程

@查看php是否启动
1)ps -ef | grep php 或者 ps -A | grep -i php

@开启php
1) php-fpm start

@停止php
1) php-fpm stop

@重启php
1) php-fpm restart

@杀死进程
1) kill -9 【pid】

@杀死php全部进程
1) killall -9 php
————————————————
版权声明:本文为CSDN博主「秋风吹过发梢」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qiujin_zebra/article/details/90379147

SVN / Git提交空目录 / 空文件夹问题解决方案 gitee

keep前段时间用Android Studio写了个安卓项目,使用SVN提交的时候发现项目包含空目录,导致SVN报错不能提交,或是使用Git提交时自动忽略空目录导致目录结构不完整。由于不敢随意删除项目目录,所以想了个办法,就是在所有的空目录内创建一个.keep的空文件。但是空目录这么多,一个一个的找出来也不实际,于是就想写一个批处理文件用于遍历所有的空目录,并在空目录内创建.keep文件。bat文件下载地址
怎么用?

文件打开后的界面是这样的
开始界面.png
将项目的总文件夹拖入框内,就会自动获取项目路径,或手动输入文件路径。在此我随便拖入一个工程用于示意
获取路径.png
键盘按回车开始查找并生成文件,刚开始的时候如果没有反应是正常的,可能是暂时还没有找到空的文件夹,不用担心,让它继续执行
执行中.png
执行完毕后将会显示这个画面,并提示你找到了多少个文件夹,已创建.keep文件,此时按任意键即可退出
完成.png
如果项目内没有空文件夹就会提示”没找到空文件夹“,此时按任意键即可退出
无空文件夹.png

这是我自己摸索着写出来的bat文件,写的不够简洁优雅,请大神们不吝赐教。
如果大家有其它解决SVN或Git不能提交空目录的方法,欢迎留言分享!

作者:Kakarottog
链接:https://www.jianshu.com/p/137c65082902
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Linux 系统 /var/log/journal/ 垃圾日志清理

清空 /var/log/journal 文件的方法

1、用echo命令,将空字符串内容重定向到指定文件中

echo “” > system.journal

说明:此方法只会清空一次,一段时间后还要再次手动清空很麻烦,这里可以用以下命令让journalctl 自动维护空间

2、journalctl 命令自动维护文件大小

1)只保留近一周的日志

journalctl –vacuum-time=1w

2)只保留500MB的日志

journalctl –vacuum-size=500M

3)直接删除 /var/log/journal/ 目录下的日志文件

rm -rf /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1
————————————————
版权声明:本文为CSDN博主「阳光岛主」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ithomer/article/details/89530790

解决宝塔面板FTP链接时“服务器发回了不可路由的地址,使用服务器地址代替。”问题

因为是刚配置的宝塔面板,对很多功能并不熟悉。最近在使用 FileZilla 链接网站时出现了“服务器发回了不可路由的地址。使用服务器地址代替。”的问题,导致无法链接网站FTP。具体显示内容如下:

由于个人对 FTP 着实不太了解,解决的历程颇为艰辛,为了避免同样遇到此问题的小伙伴走太多弯路,特此记录下来,希望能够帮助到遇到同样问题的你。

快速解决问题最简单的方式莫过于从网上查找解决方案了。简单搜了一下,大部分建议修改 FTP 连接的被动模式为“退回到主动模式(F)”,如下图所示:

自己试着设置了下,非常遗憾的是结果如下:

依旧“读取目录列表失败”,猛然间想起修改 Pure-Ftpd 配置文件时上方有个 PassivePortRange(被动模式端口范围)的选项,如下图所示:

原来是自己没有开启这个端口范围导致的,登录阿里云控制台,修改防火墙规则如下:

image.png

然后记得不要忘记宝塔面板下的安全选项卡下同样添加这个规则。

image.png

最终,目录列出成功,问题解决!

image

感谢博客:https://blog.quietguoguo.com/2951.html

作者:Oct1a
链接:https://www.jianshu.com/p/c1d61a4c111d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

扩展分区和文件系统_Linux系统盘

在扩展系统盘分区和文件系统前,请提前完成以下工作。

  1. 已创建快照备份数据。 为防止操作失误导致数据丢失,建议您操作前使用快照备份数据。具体操作请参见创建一个云盘快照
  2. 已在控制台上扩容云盘。 若尚未扩容,请参见在线扩容云盘(Linux系统)离线扩容云盘(Linux系统)
  3. 远程连接ECS实例。连接方式请参见连接方式概述
  4. 根据操作系统安装growpart或者xfsprogs扩容格式化工具。
    • Alibaba Cloud Linux 2、CentOS 7 运行yum install <package_name>命令安装工具,示例如下。 yum install cloud-utils-growpart xfsprogs -y
    • Ubuntu 14、Ubuntu 16、Ubuntu 18、Debian 9 运行apt install <package_name>命令安装工具,示例如下。 apt install cloud-guest-utils xfsprogs -y
    • Debian 8、OpenSUSE 42.3、OpenSUSE 13.1、SUSE Linux Enterprise Server 12 SP2 请使用上游版本(upstream)的growpart或者xfsprogs工具。
    说明 当出现因扩容格式化工具问题导致的扩容失败时,建议您卸载工具后重新安装。
  5. 运行uname -a命令查看实例的内核版本。
    • 如果内核版本大于等于3.6.0,请参见高内核版本的操作步骤
    • 如果内核版本小于3.6.0,如CentOS 6、Debian 7和SUSE Linux Enterprise Server 11 SP4等发行版,需要经过一次控制台重启或者API重启才能完成分区扩容。请参见低内核版本的操作步骤

背景信息

本文的操作步骤适用于以下分区和文件系统格式的云盘。

  • 分区格式支持MBR、GPT
  • 文件系统支持ext*、xfs、btrfs

扩展高内核版本实例的系统盘分区和文件系统

本节以Alibaba Cloud Linux 2.1903 LTS 64位操作系统为例,说明扩展分区和文件系统的步骤。说明 本示例操作命令同样适用于CentOS 7系统。

  1. 运行以下命令查看现有云盘大小。 fdisk -l 以下示例返回云盘(/dev/vda)容量是100GiB。 [root@ecshost ~]# fdisk -l Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000bad2b Device Boot Start End Blocks Id System /dev/vda1 * 2048 83886046 41941999 83 Linux
  2. 运行以下命令查看云盘分区大小和文件系统类型。 df -Th 以下示例返回分区(/dev/vda1)容量是40GiB,文件系统类型为ext4。 [root@ecshost ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 869M 0 869M 0% /dev tmpfs tmpfs 879M 0 879M 0% /dev/shm tmpfs tmpfs 879M 460K 878M 1% /run tmpfs tmpfs 879M 0 879M 0% /sys/fs/cgroup /dev/vda1 ext4 40G 1.8G 36G 5% / tmpfs tmpfs 176M 0 176M 0% /run/user/0
  3. 运行以下命令扩容分区。 growpart <DeviceName> <PartionNumber> 示例命令表示扩容系统盘的第一个分区(/dev/vda1)。 [root@ecshost ~]# growpart /dev/vda 1 CHANGED: partition=1 start=2048 old: size=83883999 end=83886047 new: size=209713119 end=209715167 说明 如果您在运行growpart /dev/vda 1时,系统提示unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2],可以尝试修改字符编码解决问题。具体操作,请参见常见问题
  4. 扩展文件系统。 根据文件系统类型选择以下扩展方式,请使用df -Th命令查看文件系统类型。
    • ext*文件系统(例如ext3和ext4):运行以下命令扩展文件系统。 resize2fs <PartitionName> 示例命令表示为扩容系统盘的/dev/vda1分区的文件系统。 [root@ecshost ~]# resize2fs /dev/vda1 resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/vda1 is mounted on /; on-line resizing required old_desc_blocks = 3, new_desc_blocks = 7 The filesystem on /dev/vda1 is now 26214139 blocks long.
    • xfs文件系统:运行以下命令扩展文件系统。 xfs_growfs <mountpoint> 示例命令表示为扩容系统盘的/dev/vda1分区的文件系统。其中根目录(/)为/dev/vda1的挂载点。 [root@ecshost ~]# xfs_growfs / meta-data=/dev/vda1 isize=512 agcount=13, agsize=1310656 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=15728379, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 15728379 to 20971259 说明 不同版本的xfs_growfs命令可能存在差异,您可以运行xfs_growfs --help查看对应的命令。
  5. 运行以下命令检查云盘扩容结果。 df -h 以下示例返回分区(/dev/vda1)容量是100GiB,表示已经成功扩容。 [root@ecshost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 869M 0 869M 0% /dev tmpfs 879M 0 879M 0% /dev/shm tmpfs 879M 492K 878M 1% /run tmpfs 879M 0 879M 0% /sys/fs/cgroup /dev/vda1 99G 1.8G 93G 2% / tmpfs 176M 0 176M 0% /run/user/0

zip 排除

//排除
zip -r liu.zip * -x “bdimages/*”

//排除多个
zip -r web1.zip * -x “images/*” -x “data/afficheimg/*” -x “m/img/*” -x “data/refund_log/*” -x “themes/gwbn_v2/gwbn_img/*” -x “orders/kz/*”
//查询最近修改的文件
find . -path ‘./temp’ -prune -o -name ‘*.php’ -mtime 0 -print

Linux里如何查找文件内容

Linux查找文件内容的常用命令方法。

从文件内容查找匹配指定字符串的行:

$ grep “被查找的字符串” 文件名
例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in文件
grep “thermcontact” */*.in

从文件内容查找与正则表达式匹配的行:
$ grep –e “正则表达式” 文件名

查找时不区分大小写:
$ grep –i “被查找的字符串” 文件名

查找匹配的行数:
$ grep -c “被查找的字符串” 文件名

从文件内容查找不匹配指定字符串的行:
$ grep –v “被查找的字符串” 文件名

从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行
find / -type f -name “*.log” | xargs grep “ERROR”
例子:从当前目录开始查找所有扩展名为.in的文本文件,并找出包含”thermcontact”的行
find . -name “*.in” | xargs grep “thermcontact”