当前位置: 首页 > news >正文

写SQL的心得

1、统计 COUNT(列名) 和COUNT(*)均可,区别是前者只会统计非NULL。

2、where后面不能跟聚合函数,用的话应该在Having使用,因此需要先分组GroupBy

where是基于行过滤,having是基于分组过滤

3、虽然执行顺序中having、group by在select后面,但是它们还是可以用select中定义的别名

执行顺序 :from > on > where > group by > having > select > distinct > order by > top

但是,MYSQL 中HAVING是可以使用SELECT中定义的别名。HAVING、GROUP BY都可以使用SELECT中定义的别名。

具体来说,在执行 SELECT 子句时,系统先计算 SELECT 中的列表达式和函数等,然后为这些列赋予一个列别名,并生成一个虚拟的查询结果表。接着,系统按照 GROUP BY 子句中的指定字段分组,并对每个分组进行计算,生成虚拟的分组结果表。最后,HAVING 子句基于这个虚拟的分组结果表进行筛选操作。

由于在执行 HAVING 子句时已经生成了虚拟的查询结果表和虚拟的分组结果表,已经存在列别名,但是没有值,因此 HAVING 子句可以直接引用 SELECT 列别名。

4、聚合函数本质:对指定的列进行聚合,如果我们用了group by,我们可以对每个分组应用内聚合函数。在分组内部,聚合函数会自动处理所有重复的行。举例子:

一个表中,记录了销售员ID、销售日期。需求是计算每个销售员的总销售额。

我们对ID进行分组,这样通过聚合函数SUM能将同一分组的销售额累加起来【即同一个销售员】

SELECT salesperson_id, SUM(sales_amount) AS total_sales
FROM sales_records
GROUP BY salesperson_id;

http://www.lryc.cn/news/346768.html

相关文章:

  • 经典权限五张表功能实现
  • 实验八 Linux虚拟内存 实验9.1:统计系统缺页次数成功案例
  • SD-WAN提升Microsoft 365用户体验
  • C#中的异步编程模型
  • 博通Broadcom (VMware VCP)注册约考下载证书操作手册
  • Xilinx FPGA底层逻辑资源简介(1):关于LC,CLB,SLICE,LUT,FF的概念
  • SSH(安全外壳协议)简介
  • JavaScript异步编程——08-Promise的链式调用【万字长文,感谢支持】
  • 现代制造之数控机床篇
  • Rust的协程机制:原理与简单示例
  • 学习成长分享-以近红外光谱分析学习为例
  • Linux makefile进度条
  • Ollama 可以设置的环境变量
  • 基于Python+Django+MySQL实现Web版的增删改查
  • Map、Set和Object的区别
  • Web 安全之盗链(Hotlinking)攻击详解
  • leetcode算法笔记-算法复杂度
  • 推荐算法详解
  • Java找不到包解决方案
  • vue的css深度选择器 deep /deep/
  • 2024年华为OD机试真题-计算三叉搜索树的高度-(C++)-OD统一考试(C卷D卷)
  • # ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案
  • class常量池、运行时常量池和字符串常量池详解
  • Meilisearch使用过程趟过的坑
  • 全面升级企业网络安全 迈入SASE新时代
  • 2024.1IDEA 到2026年
  • uniapp——点赞、取消点赞
  • react经验15:拖拽排序组件dnd-kit的使用经验
  • Webpack模块联邦:微前端架构的新选择
  • CMake 学习笔记(访问Python)