与count(distinct)都是很常见的操作。...count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都能明白什么意思。...count(distinct colA)的操作也可以用group by的方式完成,具体代码如下: select count(distinct colA) from table1; select count...group by的实现方式是先将colA排序。...总结起来就是,count(distinct)吃内存,查询快;group by空间复杂度小,在时间复杂度允许的情况下,可以发挥他的空间复杂度优势。
distinct简单来说就是用来去重的,而group by的设计目的则是用来聚合统计的,两者在能够实现的功能上有些相同之处,但应该仔细区分,因为用错场景的话,效率相差可以倍计。...单纯的去重操作使用distinct,速度是快于group by的。 distinct distinct支持单列、多列的去重方式。 单列去重的方式简明易懂,即相同值只保留1个。...group by使用的频率相对较高,但正如其功能一样,它的目的是用来进行聚合统计的,虽然也可能实现去重的功能,但这并不是它的长项。...group by 是用来分组的,不建议用来去除重复行,distinct 用来去除重复行,不能分组。
我们知道DISTINCT可以去掉重复数据,GROUP BY在分组后也会去掉重复数据,那这两个关键字在去掉重复数据时的效率,究竟谁会更高一点?...B.当SalesOrderDetailID取消掉自增长属性后就和普通列一样了。...2.GROUP BY与DISTINCT去掉重复数据的对比 GROUP BY与DISTINCT类似,经常会有一些针对这两个哪个效率高的争议,今天我们就将这两个在不同重复数据量的效率作下对比。...可以看出两条语句对应的执行时间GROUP BY比DISTINCT效率高一点点。...作者对上述语句同时执行多次,针对重复量多的UnitPrice,GROUP BY总的处理效率比DISTINCT高一点点,但是针对重复量低的SalesOrderDetailID,DISTINCT就比GROUP
先说结论:能使用group by代替distinc就不要使用distinct,例子: 实际论证 order_snap为订单的快照表 总记录条数763191489,即将近8亿条记录,总大小:108.877GB...,存储的是公司所有的订单信息,表的字段大概有20个,其中订单号是没有重复的,所以在统计总共有多少订单号的时候去重不去重结果都一样,我们来看看: 统计所有的订单有多少条条数,一个count函数就可以搞定的...hours 11 minutes 55 seconds 670 msec OK _c0 763191489 Time taken: 1818.864 seconds, Fetched: 1 row(s) GROUP...BY select count(t.order_no) from (select order_no from order_snap group by order_no) t; Stage-Stage-...-1: Map: 396 Reduce: 1 Cumulative CPU: 7915.67 sec HDFS Read: 119072894175 HDFS Write: 10 SUCCESS # group
group by做为分组来使用,后面为条件,可以有多个条件,条件相同的为一组,配合聚合函数进行相关统计。...结论: group by语句中select指定的字段必须是“分组依据字段”。 因此,只能这样查询: SELECT name FROM person GROUP BY name; 结果一致: ?...4.添加聚合函数 聚合函数有如下几种: 函数 作用 支持性 sum(列名) 求和 max(列名) 最大值 min(列名) 最小值 avg(列名) 平均值 first(列名) 第一条记录 仅Access...支持 last(列名) 最后一条记录 仅Access支持 count(列名) 统计记录数 注意和count(*)的区别 首先,要明白聚合函数的用法。...having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
先说大致的结论(完整结论在文末): 在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引的情况下:distinct效率高于group by。...接下来,我们先来看一下distinct和group by的基础使用。...DISTINCT和GROUP BY都是可以使用索引进行扫描搜索的。...因为group by和distinct近乎等价,distinct可以被看做是特殊的group by。 在语义相同,无索引的情况下: distinct效率高于group by。...且由于distinct关键字会对所有字段生效,在进行复合业务处理时,group by的使用灵活性更高,group by能根据分组情况,对数据进行更为复杂的处理,例如通过having对数据进行过滤,或通过聚合函数对数据进行运算
一、GROUP BY的用法及效果GROUP BY关键字用于将结果集按照一个或多个列进行分组,并对每个组应用聚合函数。...将学生按照城市进行分组,并使用COUNT(*)函数计算每个城市的学生人数。...GROUP BY的效果是将结果集中的行按照指定的列进行分组,并对每个组应用聚合函数。它不会去除重复的行,而是将重复的行分组,并对每个组应用聚合函数。...因此,如果我们在上述示例中的查询中不使用COUNT(*)函数,而是使用其他聚合函数如SUM()、AVG()等,将会得到不同的结果。...三、GROUP BY和DISTINCT对同一字段的去重效果比较尽管GROUP BY和DISTINCT都可以用于去重,但它们的用法和效果是不同的。
MySQL 提供了 GROUP_CONCAT() 函数,可以很方便地针对某字段下的值聚合成一个字符串,字符串内部默认使用“,”分割。...() 函数,我们怎么实现聚合的效果呢?...BY deptno 在 SQL 里使用 CONCAT_WS() 函数将多个值拼接成一个字符串,最后使用 GROUP BY + MAX() 取出每个分组里面最长的字符串。...另外,使用 GROUP_CONCAT() 需要注意两个地方: GROUP_CONCAT() 聚合的结果有长度限制,默认是 1024,要想支持更长的聚合结果,可以修改 group_concat_max_len...要保证有序可以设在 GROUP_CONCAT() 内部指定排序方式。
本文主要介绍,报表在使用group by rollup和group by cube后的辅助函数。...使用GROUPING函数处理汇总结果(在使用group by rollup和group by cube后的结果集)中的空值。...对比上面的没有使用GROUPING函数的结果集我们发现 ?...出现了红框内的情况 ii、解决方案: a、第一步:使用GROUP_ID()函数,这个函数的作用检索出每一个数据行在表中重复出现的次数,当然这个函数只在有GROUP BY或者GROUP BY ROLLUP...GROUP_ID()方法显示红框内的两条数据重复出现了一次,那么这两条数据就需要过滤 b、下面使用HAVING(相当于where,但是having只能用于分组函数的数据过滤,只能用于包含group by
前言:最近在写一些比较复杂的SQL,是一些统计分析类的,动不动就三四百行,也是首次写那么长的SQL,有用到一些奇形怪状的SQL函数,在这里结合网上的例子做一些笔记,以后用到不记得用法可以翻出来看!...1.基础用法:LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX),就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来 LISTAGG(...)其实可以把它当作SUM()函数来使用或者理解 (1)示例代码: WITH TEMP AS( SELECT 'CHINA' NATION ,'GUANGZHOU' CITY FROM DUAL...DEPTNO = '20' GROUP BY T .DEPTNO 运行结果: 2.高级用法:over(partition by XXX)。...在不使用Group by语句时候,也可以使用LISTAGG函数: WITH TEMP AS( SELECT 500 POPULATION, 'CHINA' NATION ,'GUANGZHOU' CITY
GROUP_CONCAT为MySQL提供的函数,MaxCompute对应为wm_concat。...|1| |wang | 2,3,2| |guo | 6 | 场景二.将a进行合并,去重 MySQL: select a, group_concat(distinct b) from t group...by a; MaxCompute: select a, wm_concat(distinct ',', b) as b from t group by a; |a| b | |zhang|1| |wang...by a; |a| b | |zhang|1| |wang | 2,2,3| |guo | 6 | 场景四.将a进行合并且排序,去重 MySQL: select a, group_concat(distinct...distinct a, b from t order by a, b asc) group by a; |a| b | |zhang|1| |wang | 2,3| |guo
函数语法: group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] ) 下面举例说明: select id,...price from goods; 以id分组,把price字段的值在同一行打印出来,逗号分隔(默认) select id, group_concat(price) from goods group...by id; 以id分组,把price字段的值在一行打印出来,分号分隔 select id,group_concat(price separator ';') from goods group...by id; 以id分组,把去除重复冗余的price字段的值打印在一行,逗号分隔 select id,group_concat(distinct price) from goods group...by id; 以id分组,把price字段的值去重打印在一行,逗号分隔,按照price倒序排列 select id,group_concat(DISTINCT price order by price
本篇主要介绍mysql的聚合函数和group by的使用,最后是OJ题目的练习。...聚合函数 MySQL中的聚合函数用于对数据进行计算和统计,常见的聚合函数包括下面列举出来的聚合函数: 函数 说明 COUNT([DISTINCT] expr) 返回查询到的数据的数量...SUM([DISTINCT] expr) 返回查询到的数据的总和,不是数字没有意义 AVG([DISTINCT] expr) 返回查询到的数据的平均值,不是数字没有意义 MAX([DISTINCT...] expr) 返回查询到的数据的最大值,不是数字没有意义 MIN([DISTINCT] expr) 返回查询到的数据的最小值,不是数字没有意义 对于上面所列举出来的聚合函数,下面我们通过一些案例来进行对聚合函数的运用...distinct select distinct count(distinct math) from exam_result; 统计数学成绩总分 select sum(math) from exam_result
[1240] DISTINCT函数 DISTINCT函数,隶属于“筛选”类函数。微软将其划分为两种模式,列与表模式。但是白茶觉得微软哪怕是不区分出来,相信大家也是了解的。...注:列模式下,返回结果受到筛选上下文影响;要与VALUES函数进行区分。...关于DISTINCT函数的基本用法介绍完毕,下面白茶说点别的。...1、参数:DISTINCT可以使用表达式作为参数,而VALUES函数不可以。 2、计数:DISTINCT去掉重复值计数时,不会考虑重复项目;而VALUES会计算重复项目行数。...白茶会不定期的分享一些函数卡片 (文件在知识星球PowerBI丨需求圈) [1240] 这里是白茶,一个PowerBI的初学者。 [1240]
group_concat函数应该是在内部执行了group by语句,这是我的猜测。...(town) FROM `players` 结果得到: group_concat(town) 长沙,北京,长沙,北京 结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果...原因可以这样理解:group_concat()得到是属于x组的所有成员(函数里面列参数指定需要显示哪些字段)。x组从哪里来?...如果没有group by进行指定,那么根本不知道group_concat()根据哪个分组进行显示出成员。 所以,像上面没有group by子句的时候,就显示了长沙和北京。...实际中什么时候需要用到这个函数? 假如需要查询的结果是这样:左边显示组名,右边想显示该组别下的所有成员信息。用这个函数,就可以省去很多事情了。
MySQL中group_concat函数用法总结 一、group_concat函数的功能 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。...group_concat函数首先根据group by指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔。由函数参数(字段名)决定要返回的列。...函数的语法 group_concat([distinct] 字段名 [order by 排序字段 asc/desc] [separator '分隔符']) 说明: (1)使用distinct可以排除重复值...参数,则销售部两个同名的员工只显示一个,结果如下: select department,group_concat(distinct emp_name) from emp group by department...; +------------+---------------------------------+ | department | group_concat(distinct emp_name) | +
今天我们介绍一下另一种方法,采用GROUP_CONCAT 函数的方式来解决,只需要对学科完成一次排序即可。...首先我们来看一下GROUP_CONCAT 函数的含义: GROUP_CONCAT函数 在 MySQL 中,GROUP_CONCAT 函数用于将查询结果按指定顺序连接成一个字符串。...以下是 GROUP_CONCAT 函数的基本语法: SELECT GROUP_CONCAT(column_name ORDER BY order_column SEPARATOR ',') FROM...group_column:分组的字段名。 通过这样的语法,我们可以在查询中使用 GROUP_CONCAT 函数来将查询结果按照指定顺序连接成一个字符串。...BY s.id ORDER BY GROUP_CONCAT(c.name ORDER BY c.name) ASC; 执行结果如下: 好了,以上就是GROUP_CONCAT 函数在实战中的一个使用场景总结记录
这是一个Oracle的列转行函数:LISTAGG() 注:oracle 11.2才能用 先看示例代码: Sql代码 1.with temp as( 2....(order by city) from temp group by nation 这是最基础的用法: LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX) 用法就像聚合函数一样...,通过Group by语句,把每个Group的一个字段,拼接起来。...同样是聚合函数,还有一个高级用法: 就是over(partition by XXX) 也就是说,在你不实用Group by语句时候,也可以使用LISTAGG函数: Sql代码 1.with temp...(order by city) over (partition by nation) rank from temp 总结:LISTAGG()把它当作SUM()函数来使用就可以了。
文章目录 一、CPU 密集型协程任务取消 二、使用 isActive 判定当前 CPU 密集型协程任务是否取消 三、使用 ensureActive 自动处理协程退出 四、使用 yield 函数检查协程状态并处理协程取消操作..., 是无法 直接取消的 ; 此类任务一直在 抢占 CPU 资源 , 使用 cancel 函数 , 无法取消该类型的 协程任务 ; 在进行 CPU 密集计算时 , 中间会有大量的中间数据 , 如果中途取消...cancel() 函数取消协程 , 则抛出 CancellationException 异常 , 取消协程 ; yield() 函数 比 ensureActive 函数 更加复杂 , 该函数还尝试出让线程执行权...* * 这个暂停功能是可以取消的。 * 如果在调用此挂起函数时取消或完成当前协程的[Job] * 这个函数正在等待调度,它会以[CancellationException]恢复。...* * **注意**:这个函数总是[检查取消][ensureActive],即使它没有挂起。
领取专属 10元无门槛券
手把手带您无忧上云