SQL刷题快速入门(二)

server/2025/1/17 0:51:50/

其他章节:SQL刷题快速入门(一)
承接上一章节,本章主要讲SQL的运算符聚合函数SQL保留小数的几种方式三个部分

运算符

SQL 支持多种运算符,用于执行各种操作,如算术运算、比较、赋值、逻辑运算等。以下是一些常见的 SQL 运算符类型及其示例:

算术运算符

  • +(加)
  • -(减)
  • *(乘)
  • /(除)
  • %(取模)
sql">SELECT column1 + column2 AS sum, column1 - column2 AS difference FROM table_name;

比较运算符

  • =(等于)
  • <>!=(不等于)
  • >(大于)
  • <(小于)
  • >=(大于等于)
  • <=(小于等于)
  • BETWEEN ... AND ...(在…和…之间)
  • LIKE(模式匹配)
  • IN(在集合中)
  • IS NULL(是 NULL)
  • IS NOT NULL(不是 NULL)
sql">SELECT * FROM table_name WHERE column1 > 100;

逻辑运算符

  • AND(逻辑与)
  • OR(逻辑或)
  • NOT(逻辑非)
  • between a and b ,包含左右边界
sql">SELECT * FROM table_name WHERE column1 > 100 AND column2 < 50;

赋值运算符

  • =(赋值)
sql">UPDATE table_name SET column1 = value WHERE condition;

位运算符

  • &(按位与)
  • |(按位或)
  • ^(按位异或)
  • ~(按位非)
  • <<(左移)
  • >>(右移)
sql">SELECT column1 & column2 AS bitwise_and FROM table_name;

特殊运算符

  • ||(字符串连接,在某些数据库中,如 PostgreSQL)
  • CONCAT(字符串连接,在某些数据库中,如 MySQL)
sql">SELECT column1 || ' ' || column2 AS concatenated_string FROM table_name;

请注意,不同的数据库系统可能支持不同的运算符集合,并且可能会有特定的语法差异。在使用特定数据库时,应该参考其官方文档以了解详细信息。

聚合函数

聚合函数(Aggregate Functions)在 SQL 中用于对一组值(通常是表中的多行)进行计算,并返回单个值作为结果。这些函数在处理数据集时非常有用,尤其是在进行数据分析和报告时。以下是一些常见的 SQL 聚合函数及其用途:

COUNT()

  • 返回指定列中的行数。
  • 示例:COUNT(*) 返回表中的总行数,COUNT(column_name) 返回非 NULL 值的行数。

SUM()

  • 返回指定列值的总和。
  • 示例:SUM(column_name) 返回 column_name 列所有值的总和。

AVG()

  • 返回指定列值的平均值(算术平均值)。
  • 示例:AVG(column_name) 返回 column_name 列所有值的平均值。

MAX()

  • 返回指定列中的最大值。
  • 示例:MAX(column_name) 返回 column_name 列中的最大值。

MIN()

  • 返回指定列中的最小值。
  • 示例:MIN(column_name) 返回 column_name 列中的最小值。

FIRST()

  • 返回指定列中的第一个值。
  • 注意:不是所有数据库系统都支持 FIRST() 函数。

LAST()

  • 返回指定列中的最后一个值。
  • 注意:不是所有数据库系统都支持 LAST() 函数。

STDDEV()

  • 返回指定列值的标准偏差。
  • 示例:STDDEV(column_name) 返回 column_name 列值的标准偏差。

VAR()

  • 返回指定列值的方差。
  • 示例:VAR(column_name) 返回 column_name 列值的方差。

聚合函数通常与 GROUP BY 子句一起使用,此时只能用having,不能用where,以便对每个分组进行计算。以下是一个使用 GROUP BYSUM() 聚合函数的例子:

sql">SELECT category, SUM(price) AS total_price
FROM products
GROUP BY category;

在这个例子中,SUM(price) 计算每个类别 category 的总价格,并使用 GROUP BY 子句按类别分组结果。

having

where中的属性不能是聚合函数得来的,如果属性是聚合函数得来的新属性,得用having!而having的属性必须出现在group by中

在MySQL中,HAVING子句通常与GROUP BY子句搭配使用,用于对分组后的结果进行条件过滤。HAVING子句的作用与WHERE子句类似,但是WHERE子句不能与聚合函数(如SUM()COUNT()AVG()等)一起使用,而HAVING可以。
以下是HAVING子句的一些关键点:

  • 搭配使用HAVING子句通常与GROUP BY子句一起使用。
  • 作用:它用于指定分组(由GROUP BY创建)必须满足的条件,以使这些分组在最终结果集中出现。
  • 聚合函数HAVING允许您包含聚合函数来过滤分组后的结果。
    以下是一个使用HAVING子句的示例:

HAVING子句的限制:HAVING所选的属性必须是包含在GROUP BY子句中的列,或者用于聚合函数。如果university列没有被包含在GROUP BY子句中,则不能用。

列与聚合函数:在SELECT语句中选择非聚合列时,这些列必须出现在GROUP BY子句中。

要解决这个问题,您需要做以下修改:

  • 确保所有在SELECT子句中出现的非聚合列都在GROUP BY子句中列出。
  • 如果您想要根据university列过滤结果,您应该在WHERE子句中进行,而不是在HAVING子句中。
sql">SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

在这个例子中:

  • GROUP BY departmentemployees表中的记录按department列分组。
  • HAVING COUNT(*) > 10确保只有那些拥有超过10名员工的部门会被包含在结果集中。
    如果没有GROUP BY子句,HAVING子句将不会起作用,因为没有分组的概念。此外,如果需要使用WHERE子句来过滤行,则在GROUP BYHAVING子句之前应用它。例如:
sql">SELECT department, COUNT(*) AS employee_count
FROM employees
WHERE salary > 50000
GROUP BY department
HAVING COUNT(*) > 10;

在这个例子中:

  • WHERE salary > 50000首先过滤出薪水超过50000的员工。
  • 然后按department分组。
  • 最后,HAVING COUNT(*) > 10确保只有那些拥有超过10名高薪员工的部门会被选中。

保留小数

不同数据库的函数可能存在细微差别,这里以 MySQL 为例,可以使用以下函数来处理数值的四舍五入、截断、向上取整和向下取整操作:

1. 四舍五入保留小数

函数: ROUND(number, decimals)

  • 参数:

    • number: 要进行四舍五入的数值。
    • decimals: 要保留的小数位数。如果为正数,表示保留小数点后的位数;如果为负数,表示对整数部分进行四舍五入。
  • 举例:

    sql">SELECT ROUND(123.4567, 2);  -- 结果为 123.46
    SELECT ROUND(123.456, 0) AS rounded_value;  -- 意思是保留整数,结果是 123
    SELECT ROUND(123.4567, -1); -- 结果为 120
    

2. 截断到指定位

函数: TRUNCATE(number, decimals)

  • 参数:

    • number: 要进行截断的数值。
    • decimals: 要保留的小数位数。如果为正数,表示保留小数点后的位数;如果为负数,表示对整数部分进行截断。
  • 举例:

    sql">SELECT TRUNCATE(123.4567, 2);  -- 结果为 123.45
    SELECT TRUNCATE(123.4567, -1); -- 结果为 120
    

3. 向上取整

函数: CEILING(number)CEIL(number)

  • 参数:

    • number: 要进行向上取整的数值。
  • 举例:

    sql">SELECT CEILING(123.4567);  -- 结果为 124
    SELECT CEILING(-123.4567); -- 结果为 -123
    

4. 向下取整

函数: FLOOR(number)

  • 参数:

    • number: 要进行向下取整的数值。
  • 举例:

    sql">SELECT FLOOR(123.4567);  -- 结果为 123
    SELECT FLOOR(-123.4567); -- 结果为 -124
    

http://www.ppmy.cn/server/158950.html

相关文章

为AI聊天工具添加一个知识系统 之32 三“中”全“会”:推理式的ISA(父类)和IOS(母本)以及生成式CMN (双亲委派)之1

本文要点和问题 要点 三“中”全“会”&#xff1a;推理式的ISA的&#xff08;父类-父类源码&#xff09;和IOS的&#xff08;母本-母类脚本&#xff09;以及生成式 CMN &#xff08;双亲委派-子类实例&#xff09;。 数据中台三端架构的中间端(信息系统架构ISA &#xff1a…

Wireshark 使用教程:网络分析从入门到精通

一、引言 在网络技术的广阔领域中&#xff0c;网络协议分析是一项至关重要的技能。Wireshark 作为一款开源且功能强大的网络协议分析工具&#xff0c;被广泛应用于网络故障排查、网络安全检测以及网络协议研究等诸多方面。本文将深入且详细地介绍 Wireshark 的使用方法&#x…

在MacOS上怎样远程调试PC的内核驱动程序

在macOS上远程调试Windows或Linux PC的内核驱动程序是一个复杂的过程&#xff0c;因为macOS并没有直接支持内核调试的工具。通常需要借助交叉调试工具链和虚拟化技术来实现。以下是详细的步骤和方法&#xff0c;分为远程调试Windows内核驱动程序和远程调试Linux内核驱动程序两部…

HTTP 范围Range请求

引言 在现代Web应用中&#xff0c;HTTP范围请求是一种重要的技术&#xff0c;允许客户端请求资源的部分内容&#xff0c;而不是整个资源。这对于大型文件的传输尤其有用&#xff0c;如视频流、断点续传下载等。本文将深入探讨HTTP范围请求的工作原理、实现方法和应用场景。 H…

Qt 自动根据编译的dll或exe 将相关dll文件复制到目标文件夹

Qt 自动根据编译的dll或exe 将相关dll文件复制到目标文件夹 如果你在使用 windeployqt 时遇到错误 “windeployqt 不是内部或外部命令”&#xff0c;说明你的命令行环境没有正确配置 Qt 工具路径。windeployqt 是 Qt 工具的一部分&#xff0c;它用于自动将所有必要的 Qt 库和插…

24-25-1-单片机开卷部分习题和评分标准

依据相关规定试卷必须按评分标准进行批改。 给分一定是宽松的&#xff0c;能给分一定给&#xff0c;如有疑问也可以向学院教务办申请查卷。 一部分学生期末成绩由于紧张或其他原因导致分数过低&#xff0c;也是非常非常遗憾的。 个人也是非常抱歉的。 开卷考试 简答题 第一…

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行&#xff1a;清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏&#xff1f; 2️⃣清除测试数据&#xff1a;连接数据库setup线程组 ①明确…

【再谈设计模式】模板方法模式 - 算法骨架的构建者

一、引言 在软件工程、软件开发过程中&#xff0c;我们经常会遇到一些算法或者业务逻辑具有固定的流程步骤&#xff0c;但其中个别步骤的实现可能会因具体情况而有所不同的情况。模板方法设计模式&#xff08;Template Method Design Pattern&#xff09;就为解决这类问题提供了…