一文读懂SQL中的Aggregate(聚合) 函数和Scalar(标准)函数

目录

前言:

一、SQL Aggregate 函数

1、AVG() 函数

2、count()函数

3、MAX() 函数

4、MIN() 函数

5、SUM() 函数

6、SQL GROUP BY 语法

7、SQL HAVING 子句

8、SQL EXISTS 运算符

9、SQL UNION 操作符

二、SQL Scalar 函数

1、SQL UCASE() 函数

2、SQL LCASE() 函数

3、SQL MID() 函数

4、SQL LEN() 函数

5、SQL ROUND() 函数

6、 SQL NOW() 函数

7、SQL FORMAT() 函数


前言:

SQL 拥有很多可用于计数和计算的内建函数。大致分为两类:SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。SQL Scalar 函数基于输入值,返回一个单一的值。

一、SQL Aggregate 函数

SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。

有用的 Aggregate 函数:

  • AVG() - 返回平均值
  • COUNT() - 返回行数
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回总和

1、AVG() 函数

AVG() 函数返回数值列的平均值。

从 "access_log" 表的 "count" 列获取平均值:

SELECT AVG(count) AS CountAverage FROM access_log;

选择访问量高于平均访问量的 "site_id" 和 "count":

SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);

2、count()函数

COUNT() 函数返回匹配指定条件的行数。

COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)

SELECT COUNT(column_name) FROM table_name;

COUNT(*) 函数返回表中的记录数:

SELECT COUNT(*) FROM table_name;

COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:

SELECT COUNT(DISTINCT column_name) FROM table_name;

计算 "access_log" 表中 "site_id"=3 的总访问量:

SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;

计算 "access_log" 表中不同 site_id 的记录数:

SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;

3、MAX() 函数

MAX() 函数返回指定列的最大值。

从 "Websites" 表的 "alexa" 列获取最大值:

SELECT MAX(alexa) AS max_alexa FROM Websites;

4、MIN() 函数

MIN() 函数返回指定列的最小值。

从 "Websites" 表的 "alexa" 列获取最小值:

SELECT MIN(alexa) AS min_alexa FROM Websites;

5、SUM() 函数

SUM() 函数返回数值列的总数。

查找 "access_log" 表的 "count" 字段的总数:

SELECT SUM(count) AS nums FROM access_log;

6、SQL GROUP BY 语法

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组
统计 access_log 各个 site_id 的访问量:

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

统计有记录的网站的记录数量:

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

7、SQL HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用,HAVING 子句可以让我们筛选分组后的各组数据

where 和having之后都是筛选条件,但是有区别的:

(1)where在group by前, having在group by 之后

(2)聚合函数(avg、sum、max、min、count),不能作为条件放在where之后,但可以放在having之后

查找总访问量大于 200 的网站

SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

查找总访问量大于 200 的网站,并且 alexa 排名小于 200。

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200 
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;

8、SQL EXISTS 运算符

EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

查找总访问量(count 字段)大于 200 的网站是否存在。

SELECT Websites.name, Websites.url 
FROM Websites 
WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 20

EXISTS 可以与 NOT 一同使用,查找出不符合查询语句的记录:

SELECT Websites.name, Websites.url 
FROM Websites 
WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);

9、SQL UNION 操作符

SQL UNION 操作符合并两个或多个 SELECT 语句的结果。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

SQL UNION 语法

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

SQL UNION ALL 语法

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注释UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

示例:

从 "Websites" 和 "apps" 表中选取所有不同的country(只有不同的值):

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

注释UNION 不能用于列出两个表中所有的country。如果一些网站和APP来自同一个国家,每个国家只会列出一次。UNION 只会选取不同的值。请使用 UNION ALL 来选取重复的值!

 

使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的country(也有重复的值)

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country;

 使用 UNION ALL 从 "Websites" 和 "apps" 表中选取所有的中国(CN)的数据(也有重复的值)

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

 


二、SQL Scalar 函数

SQL Scalar 函数基于输入值,返回一个单一的值。

有用的 Scalar 函数:

  • UCASE() - 将某个字段转换为大写
  • LCASE() - 将某个字段转换为小写
  • MID() - 从某个文本字段提取字符,MySql 中使用
  • SubString(字段,1,end) - 从某个文本字段提取字符
  • LEN() - 返回某个文本字段的长度
  • ROUND() - 对某个数值字段进行指定小数位数的四舍五入
  • NOW() - 返回当前的系统日期和时间
  • FORMAT() - 格式化某个字段的显示方式

1、SQL UCASE() 函数

UCASE() 函数把字段的值转换为大写。

从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为大写:

SELECT UCASE(name) AS site_title, url
FROM Websites;

2、SQL LCASE() 函数

LCASE() 函数把字段的值转换为小写。

从 "Websites" 表中选取 "name" 和 "url" 列,并把 "name" 列的值转换为小写:

SELECT LCASE(name) AS site_title, url
FROM Websites;

3、SQL MID() 函数

MID() 函数用于从文本字段中提取字符

从 "Websites" 表的 "name" 列中提取前 4 个字符:

SELECT MID(name,1,4) AS ShortTitle
FROM Websites;

4、SQL LEN() 函数

LEN() 函数返回文本字段中值的长度。

从 "Websites" 表中选取 "name" 和 "url" 列中值的长度

SELECT name, LENGTH(url) as LengthOfURL
FROM Websites;

5、SQL ROUND() 函数

ROUND() 函数用于把数值字段舍入为指定的小数位数。

ROUND(X): 返回参数X的四舍五入的一个整数。

mysql> SELECT ROUND(-1.23);
        -> -1
mysql> SELECT ROUND(-1.58);
        -> -2
mysql> SELECT ROUND(1.58);
        -> 2

ROUND(X,D): 返回参数X的四舍五入的有 D 位小数的一个数字。如果D为0,结果将没有小数点或小数部分。

mysql> SELECT ROUND(1.298, 1);
        -> 1.3
mysql> SELECT ROUND(1.298, 0);
        -> 1

6、 SQL NOW() 函数

NOW() 函数返回当前系统的日期和时间。

从 "Websites" 表中选取 name,url,及当天日期:

SELECT name, url, Now() AS date
FROM Websites;

7、SQL FORMAT() 函数

FORMAT() 函数用于对字段的显示进行格式化。

从 "Websites" 表中选取 name, url 以及格式化为 YYYY-MM-DD 的日期:

SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date
FROM Websites;

 

### 关于面包板电源模块 MB102 的 USB 供电规格及兼容性 #### 1. **MB102 基本功能** 面包板电源模块 MB102 是一种常见的实验工具,主要用于为基于面包板的小型电子项目提供稳定的电压输出。它通常具有两路独立的稳压输出:一路为 5V 和另一路可调电压(一般范围为 3V 至 12V)。这种设计使得它可以满足多种芯片和传感器的不同工作电压需求。 #### 2. **USB 供电方式** MB102 支持通过 USB 接口供电,输入电压通常是标准的 5V DC[^1]。由于其内部集成了 LM7805 稳压器以及可调节电位器控制的直流-直流变换电路,因此即使输入来自电脑或其他低功率 USB 设备,也能稳定地向负载供应电力。不过需要注意的是,如果项目的功耗较高,则可能超出某些 USB 端口的最大电流能力(一般是 500mA),从而引起不稳定现象或者保护机制启动断开连接的情况发生。 #### 3. **兼容性分析** 该型号广泛适用于各种微控制器单元 (MCU),特别是那些像 Wemos D1 R32 这样可以通过杜邦线轻松接入并共享相同逻辑级别的系统[^2]。另外,在提到 Arduino Uno 板时也表明了良好的互操作性,因为两者均采用相似的标准接口定义与电气特性参数设置[^4]: - 对于需要 3.3V 工作环境下的组件来说,只需调整好对应跳线帽位置即可实现精准匹配; - 当涉及到更多外围扩展应用场合下,例如带有多重模拟信号采集任务的情形里,利用 MB102 提供干净无干扰的基础能源供给就显得尤为重要了[^3]。 综上所述,对于打算构建以单片机为核心的原型验证平台而言,选用具备良好声誉记录且易于获取配件支持服务链路上下游资源丰富的品牌产品——如这里讨论过的这款特定类型的配电装置不失为明智之举之一。 ```python # 示例 Python 代码展示如何检测硬件状态 import machine pin = machine.Pin(2, machine.Pin.IN) if pin.value() == 1: print("Power supply is stable.") else: print("Check your connections and power source.") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言程序plus

你的鼓励将是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值