的一些进阶使用技巧 SQL 的优化方法 SQL 的书写规范 在介绍一些技巧之前,有必要强调一下规范,这一点我发现工作中经常被人忽略,其实遵循好的规范可读性会好很多,应该遵循哪些规范呢 1、 表名要有意义...这样可能会产生潜在的性能问题:排序,会产生排序的代表性运算有下面这些 GROUP BY 子句 ORDER BY 子句 聚合函数(SUM、COUNT、AVG、MAX、MIN) DISTINCT 集合运算符...怎样做可以减少排序呢。...三、能写在 WHERE 子句里的条件不要写在 HAVING 子句里 下列 SQL 语句返回的结果是一样的: -- 聚合后使用 HAVING 子句过滤 SELECT sale_date, SUM(quantity...八、减少中间表 在 SQL 中,子查询的结果会产生一张新表,不过如果不加限制大量使用中间表的话,会带来两个问题,一是展示数据需要消耗内存资源,二是原始表中的索引不容易用到,所以尽量减少中间表也可以提升性能
因此如果想优化查询性能,我们必须知道如何写出更快的SQL,才能使优化器的执行效率更高。..., SUM(quantity) FROM SalesHistory GROUP BY sale_date HAVING sale_date = '2007-10-01'; --聚合前使用WHERE...三、减少中间表 在SQL中,子查询的结果会被看成一张新表,这张新表与原始表一样,可以通过代码进行操作。...频繁使用中间表会带来两个问题,一是展开数据需要耗费内存资源,二是原始表中的索引不容易使用到(特别是聚合时)。因此,尽量减少中间表的使用也是提升性能的一个重要方法。...到此本文讲解完毕,感谢大家阅读,感兴趣的朋友可以点赞加关注,你的支持将是我更新动力?。
可以说,每个数据分析岗都需要会SQL。 我本人曾在滴滴、美团、平安科技的数据分析类岗位实习过,实习期间会大量运用sql进行取数。...读完本文,你能快速知道: (1)除了select 这种基本的语句,我最应该马上掌握的SQL语句和知识是什么? (2)面试中SQL题80%都在考察的语法是什么? (3)这些语法应该怎么使用?...:max/min/avg/sum -- 统计最大/最小/平均年龄 select max(age), min(age),avg(age) from table_1 group by id 聚合函数帮助我们进行基本的数据统计...rank()排序相同时会重复,总数不会变 ,意思是会出现1、1、3这样的排序结果; dense_rank() 排序相同时会重复,总数会减少,意思是会出现1、1、2这样的排序结果。...当初我学SQL的时候,盯着《SQL必知必会》翻来覆去的看,但是知识点真的比较多,也比较零碎。
注意事项 SUM 函数通常与 GROUP BY 子句结合使用,用于对不同组的数据进行总和计算。 结果是一个数值,表示满足条件的列值的总和。 SUM 函数是 SQL 中用于计算数值总和的重要聚合函数。...*避免 SELECT : 只选择需要的列,而不是使用 SELECT *,以减少数据传输和提高查询效率。 表结构设计 范式化 vs....垂直分割和水平分割: 将大型表拆分为更小的表,以减少查询的数据量。 缓存机制 使用缓存: 使用缓存技术,减少对数据库的频繁访问,特别是对于静态或不经常变化的数据。...注意数据模型 检查数据模型设计: 如果频繁需要使用 DISTINCT,可能需要重新审视数据模型的设计,看是否可以通过调整模型减少重复数据。...八、总结 聚合函数是SQL中重要的工具,用于对数据进行汇总和计算。从COUNT到SUM、AVG,再到强大的窗口函数,深入理解这些函数有助于高效处理和分析数据库中的大量数据。
性能挑战:数据库优化器的视角 相关标量子查询虽然强大,但也给数据库优化器带来了不小的挑战: 重复计算:在大数据集上,子查询可能会被重复计算,影响性能。...SELECT c_custkey, (SELECT SUM(o_totalprice) FROM ORDERS WHERE o_custkey = c_custkey AND o_orderdate...SELECT /*QB_1*/ c_custkey, SUM_ AS total, count_ AS cnt FROM CUSTOMER LEFT OUTER JOIN ( SELECT o_custkey...执行计划改进: 通过预先聚合 orders 表的数据,大大减少了需要处理的数据量 消除了重复的子查询执行,将两个子查询合并为一个 使用哈希连接来高效地关联 customer 和聚合后的 orders 数据...通过将多个相关子查询合并为一个派生表,并使用外连接,优化器能够显著减少重复计算和数据访问。
(姓名)>=2即可,count(姓名)是自己又在返回的视图看到了另一个字段,这个字段用来显示出现的重复姓名的次数。...注意 因为聚合函数通过作用于一组数据而只返回一个单个值,因此,在SELECT语句中出现的元素要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,否则会出错。...不知道大家有没有遇到过 aggregator blah blah 之类的报错,我用 group by 的时候就放过这个错,现在想来应该就是 后面用了 group by,却没对字段进行聚合,导致单元格里有多个值...聚合函数,就是用来输入多个数据,输出一个数据的,如count(id), sum(number),每个聚合函数的输入就是每一个多数据的单元格。...因此,这里可以执行 select name,sum(number) from test group by name 1 那么sum 函数就是对虚拟表3中,每个name对应的number单元格进行sum操作
集合操作默认都存在一个隐式去除重复(即包含DISDINCT)的行为,只有UNION ALL支持重复数据。这儿补充一个关于集合概念,集合指不包含重复数据的集合,包含重复数据的情况我们称之为多元集合。...还不支持这种类型的操作,理解起来有点复杂,简单来说就是如果我的子查询A, B都有重复数据,一个是3条,一个是5条, 那么其INTERSECT ALL操作结果应该为3条,EXCEPT ALL的结果是2条。...,减少不必要的开销。...),比如SUM(Amount),但现在想对分组内的行记录进行排序,这个更小的操作粒度在过去的SQL中是难以实现的,这是开窗函数却可以完成这部分的工作。...3个阶段:第一个阶段为GROUP BY empid分组阶段;第二阶段为扩展阶段通过在SELECT字句中使用针对目标列的CASE表达式;最后一个阶段聚合阶段通过对每个CASE表达式结果聚合,例如SUM。
避免冗余的DISTINCT 技巧: 只有在真正有重复数据时才使用DISTINCT。...CUBE和ROLLUP优化多维分析查询 技巧: 使用CUBE和ROLLUP进行多维聚合分析,减少多次单独的GROUP BY操作。...案例: 问题SQL: 分别进行多次GROUP BY分析 SELECT department_id, SUM(sales) FROM sales_data GROUP BY department_id;...SELECT region, SUM(sales) FROM sales_data GROUP BY region; 优化: 使用ROLLUP进行多层次的聚合分析,减少多次查询 SELECT department_id...案例: 问题SQL: 复杂聚合查询,性能瓶颈明显 SELECT department_id, SUM(sales) FROM sales_data GROUP BY department_id; 优化:
举例:若原表中有id一样的10行数据,使用GROUP BY,返回的结果是将多条记录聚合成一条;而使用 rank() 等窗口函数并不会减少原表中 记录的行数,结果中仍然包含 10 行数据。...() as sum_score 会聚合所有的数据,将结果接到每一行的后面(窗口函数不会改变结果原表行数)。...我们看到1004中的score是无序的,如果想按照score降序排名应该怎么做呢?...当order by 与聚合类函数连用时,特别需要注意理解,如下面几个例子: 先看前面的例子,单独使用 partition by uid SELECT uid, score, sum...当然,这种操作可以用表的自连接实现,但是LAG()和LEAD()与left join、rightjoin等自连接相比,效率更高,SQL更简洁。下面我就对这两个函数做一个简单的介绍。
大家好,又见面了,我是你们的朋友全栈君。...SQL聚合函数基本上在多个列上进行操作以执行操作,并将输出表示为表示所执行操作的实体。...ALL确保即使重复值也被考虑用于计算。...---- ---- SQL中的聚合函数: (Aggregate Functions in SQL:) AVG() AVG() MIN() MIN() MAX() MAX() SUM()...因此,在本文中,我们了解了不同SQL聚合函数。
此时就要用到窗口函数的分组排序能力: SELECT *, rank() over (PARTITION BY city ORDER BY people) FROM test 该 SQL 表示在 city...如果不用 GROUP BY,聚合后返回行数会压缩为一行,即使用了 GROUP BY,返回的行数一般也会大大减少,因为分组聚合了。...然而使用窗口函数的聚合却不会导致返回行数减少,那么这种聚合是怎么计算的呢?...分组内,按照 people 排序后进行了 累加(相同的值会合并在一起),这就是 BI 工具一般说的 RUNNGIN_SUM 的实现思路,当然一般我们排序规则使用绝对不会重复的日期,所以不会遇到第一个红框中合并计算的问题...累计聚合作用于查询结果行粒度,支持所有聚合函数。 讨论地址是:精读《SQL 窗口函数》· Issue #405 · ascoders/weekly
举例:若原表中有id一样的10行数据,使用GROUP BY,返回的结果是将多条记录聚合成一条;而使用 rank() 等窗口函数并不会减少原表中 记录的行数,结果中仍然包含 10 行数据。...我们看到1004中的score是无序的,如果想按照score降序排名应该怎么做呢?...当order by 与聚合类函数连用时,特别需要注意理解,如下面几个例子: 先看前面的例子,单独使用 partition by uid SELECT uid, score, sum...如: -- sql ① select id, dept, salary, min(salary) over(partition by dept) min_sal from dept; -- sql...当然,这种操作可以用表的自连接实现,但是LAG()和LEAD()与left join、rightjoin等自连接相比,效率更高,SQL更简洁。下面我就对这两个函数做一个简单的介绍。
美女:叫姐姐 小男孩低头看了下贵宾犬,虽说有点不乐意,但还是说道:阿姨,我能摸下这个姐姐吗? 楼主想忍住,但实在是忍不住了,哈哈哈... ?...数据量少,我们一眼就能看出来,但是如果数据量上百万行了,用眼就看不出来了吧 不绕圈子了,我就直接写了,相信大家都能看懂(记得和自己想的对比一下) SELECT '存在缺失的编号' AS gap...SELECT dept FROM tbl_student_submit_log GROUP BY dept HAVING COUNT(*) = SUM( CASE WHEN submit_date...执行速度更快 使用 COUNT 等函数对表中数据进行聚合操作时,DBMS 内部进行排序处理,而排序处理会大大增加机器的负担,从而降低处理速度;因此,尽可能减少排序的行数,可以提高处理速度 ...通过 WHERE 子句指定条件时,由于排序之前就对数据进行了过滤,那么就减少了聚合操作时的需要排序的记录数量;而 HAVING 子句是在排序之后才对数据进行分组的,与在 WHERE 子句中指定条件比起来
这样可能会产生潜在的性能问题:排序,会产生排序的代表性运算有下面这些 GROUP BY 子句 ORDER BY 子句 聚合函数(SUM、COUNT、AVG、MAX、MIN) DISTINCT 集合运算符...3、能写在 WHERE 子句里的条件不要写在 HAVING 子句里 下列 SQL 语句返回的结果是一样的: -- 聚合后使用 HAVING 子句过滤 SELECT sale_date, SUM(quantity...8、减少中间表 在 SQL 中,子查询的结果会产生一张新表,不过如果不加限制大量使用中间表的话,会带来两个问题,一是展示数据需要消耗内存资源,二是原始表中的索引不容易用到,所以尽量减少中间表也可以提升性能...这是我司出现很多慢 SQL 的主要原因之一,尤其是在跑任务需要分页执行时,经常跑着跑着 offset 就跑到几十万了,导致任务越跑越慢。...」可以发现 key 为 None ,说明确实没有命中索引 我司在提供 SQL 查询的同时,也贴心地加了一个 EXPLAIN 功能及 sql 的优化建议,建议各大公司效仿 ^_^,如图示 21、 批量插入
-- demo -- 下图结果第三行就是超级聚合行 select name, sum(score) from students group by rollup(name) name sum...,如果要取 1 条,需要 sql 查到的数据不重复,rank = 1 不能保证仅取 1 条, 除非你使用得函数是 row_number(): demo 大概场景就是,我们需要查询一张表,要按照某个字段...sql\spark sql\其他场景 优化 列表优化 列表中涉及的业务信息表,用户信息表全部都是大表,列表性能很差,短期内想分表需要改的业务太多,急需提高整体合同列表的性能。...定时任务同时写多个相同类型的 sql,减少任务量,也可以把同类型任务归类。...,到达时间就会进行对应的表生成,任务数降低,相同模块表聚合度增强,更易维护,这些表我统一命名为 d_7d_1m。
建议:对于初学者或想转行数据分析的同学,可以先收藏,等具备一定数分基础后再跟随学习效果更佳。基础学习可以参照上期的【数据分析师的必要条件】。...,count(1) as cnt from temp1 group by age ,gender 在进行等值判断时,SQL默认会将数值型字符串转为double型后判断,减少类型转换操作。...count(col) over()按窗口计数 聚合函数avg(col) over()按窗口求均值 聚合函数sum(col) over()按窗口求和 聚合函数min(col) over()按窗口求最小值...聚合函数max(col) over()按窗口求最大值 排序函数row_number() over()不重复排序1,2,3,4排序函数rank() over()重复排序,跳数字排序1,2,2,4排序函数dense_rank...sum(d) as d from ( select coalesce(a,'未知') as a -- 对所有参与强化聚合的维度进行null替换
数据以行为粒度存储,最简单的 SQL 语句是 select * from test,拿到的是整个二维表明细,但仅做到这一点远远不够,出于以下两个目的,需要 SQL 提供聚合函数: 明细数据没有统计意义,...另外聚合本身也有一定逻辑复杂度,而 SQL 提供了聚合函数与分组聚合能力,可以方便快速的统计出有业务价值的聚合数据,这奠定了 SQL 语言的分析价值,因此大部分分析软件直接采用 SQL 作为直接面向用户的表达式...当然任何聚合函数都可以跟随查询条件 WHERE,比如: SELECT COUNT(*) FROM test WHERE is_gray = 1 SUM SUM 求和所有项,因此必须作用于数值字段,而不能用于字符串...GROUP BY a,b,c 查询结果第一列可能看到许多重复的 a 行,第二列看到重复 b 行,但在同一个 a 值内不会重复,c 在 b 行中同理。...总结 聚合函数 + 分组可以实现大部分简单 SQL 需求,在写 SQL 表达式时,需要思考这样的表达式是如何计算的,比如 MAX(c1), c2 是合理的,而 SUM(c1), c2 这个 c2 就是无意义的
语句用于结合聚合函数,根据一个或多个列对结果集进行分组 统计 access_log 各个 site_id 的访问量:SELECT site_id, SUM(access_log.count) AS numsFROM...where 和having之后都是筛选条件,但是有区别的:(1)where在group by前, having在group by 之后(2)聚合函数(avg、sum、max、min、count),不能作为条件放在...如果允许重复的值,请使用 UNION ALL。...请使用 UNION ALL 来选取重复的值!...dateFROM Websites;我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!
学习目标 熟练应用SELECT语句进行数据查询。 掌握应用SELECT语句进行分组聚合查询。 掌握应用SELECT语句多表联接查询和子查询。...例如,如果我们想查询某个部门的所有员工,可以使用 IN 运算符来指定多个部门编号。...使用 IN 运算符可以使查询更清晰,并减少重复代码。 BETWEEN 运算符 BETWEEN 运算符用于选择在某个范围内的值。...例如,计算员工总数: SELECT COUNT(*) FROM Employees; SUM 函数 SUM 函数用于计算某一列的总和。...例如,计算所有订单的总金额: SELECT SUM(TotalAmount) FROM Orders; AVG 函数 AVG 函数用于计算平均值。
领取专属 10元无门槛券
手把手带您无忧上云