写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;
相关推荐
2601_9521963629 分钟前
计算机科学与技术专业应届生投商业分析岗,需要哪些额外能力?
数据库·oracle
皮皮学姐分享-ppx34 分钟前
地级市、省级人才政策强度测算(2000-2025)
大数据·数据库·人工智能·百度·高考
晚安日记wanna40 分钟前
大厂禁 JOIN 的真正原因,拆到第四层才清楚
数据库·后端·面试
java1234_小锋1 小时前
Redis 宣布正式接入 AI
数据库·人工智能·redis
这个DBA有点耶1 小时前
数据融合平台的下一代形态:数据库内核自己就能融合,为什么还要ETL?
数据库·架构·aigc
数据库小学妹2 小时前
MySQL大表怎么优化?2亿行表的分区归档与冷热分离实战
数据库·mysql·分库分表·分区表·数据库运维·冷热分离
91刘仁德2 小时前
RAG实战 - 向量数据库(Milvus)
数据库·milvus
资深技术分享员2 小时前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库
煎饼皮皮侠2 小时前
设计一个Web版数据库管理平台(之六):SQL执行监听器 —— 日志、监控与审计
sql·数据库平台
我是小白呀2 小时前
n8n 实战:把 AcmeFlow 的 READY 事件接到 CRM 通知
数据库·人工智能·workflow