下班路上看见网上有人问一个问题: oracle 10g以后count(*)和count(非空列)性能方面有什么区别?...我们分别用10053打印如下4组SQL的trace, SQL1:select count(*) from bisal; SQL2:select count(1) from bisal; SQL3:select...count(id1) from bisal; SQL4:select count(id2) from bisal; 我们来看下这四个SQL的执行结果, ?...前三个均为表数据总量,第四个SQL结果是99999,仅包含非空记录数据量,说明若使用count(允许空值的列),则统计的是非空记录的总数,空值记录不会统计,这可能和业务上的用意不同。...总结: 11g下,通过实验结论,说明了count()、count(1)和count(主键索引字段)其实都是执行的count(),而且会选择索引的FFS扫描方式,count(包含空值的列)这种方式一方面会使用全表扫描
最近的工作中,我听到组内两名研发同学在交流数据统计性能的时候,说到以下内容: 你怎么能用 count(*) 统计数据呢,count(*) 太慢了,要是把数据库搞垮了那不就完了么,用 count(1),这样比较快...count(*) 性能与存储引擎相关 我们都知道,MySQL 常见的存储引擎有两种:MyISAM 和 InnoDB。...count(字段) 分为两种情况,字段定义为 not null 和 null: 1)为 not null 时:逐行从记录里面读出这个字段,判断不为 null,累加; 2)为 null 时:执行时,判断到有可能是...执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为null count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为null count...(*) 如果有主键,则 select count(主键) 的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。
GROUP BY 后 SELECT 列的限制 标准 SQL 规定,在对表进行聚合查询的时候,只能在 SELECT 子句中写下面 3 种内容:通过 GROUP BY 子句指定的聚合键、聚合函数(SUM 、...cno,cname,count(sno),MAX(sno) FROM tbl_student_class GROUP BY cno,cname; 因为cno 和 cname 本来就是一对一,cno...SELECT cno,cname,count(sno),MAX(sno) FROM tbl_student_class GROUP BY cno; 执行报错了,提示信息:SELECT 列表中的第二个表达式...SQL 模式主要分两类:语法支持类和数据检查类,常用的如下 语法支持类 ONLY_FULL_GROUP_BY 对于 GROUP BY 聚合操作,如果在 SELECT 中的列、HAVING 或者...SELECT 子句中不能直接引用原表中的列的原因; 3、一般来说,单元素集合的属性和其唯一元素的属性是一样的。
最近写了一些SQL,在用count进行统计的时候,我一般都习惯用count(*),看同事的代码有事会用count(1),那么count(*),count(1)和count(某一列)有什么区别呢?...首先从查询结果来看: count(*)和count(1)统计的是整张表的所有行。...count(列):如果统计的列不允许为null,则统计的也是所有行,当这一列有null值时,count将忽略null的行。...于是在自己的数据库里进行测试: 1.4000+数据,查询时间一样,都是0.003 sec 2.14W+数据,count(1): 0.078 sec count...(*): 0.059 sec count(id): 0.067 sec 从结果上来看,是count(*)比较快。
结论 https://www.cnblogs.com/sueris/p/6650301.html 这里把上面实验的结果总结一下: count()和count(1)执行的效率是完全一样的。...count()的执行效率比count(col)高,因此可以用count()的时候就不要去用count(col)。...count(col)的执行效率比count(distinct col)高,不过这个结论的意义不大,这两种方法也是看需要去用。...如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助。 如果经常count()的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能。...在不加WHERE限制条件的情况下,COUNT()与COUNT(COL)基本可以认为是等价的; 但是在有WHERE限制条件的情况下,COUNT()会比COUNT(COL)快非常多; count(0)=
思路就是通过article表来分别join成果product表、user表和project表,然后group里用productid来筛选,最后再用projectid筛选。...pid int64) (results []*Result, err error) { db := GetDB() db.Order("total desc").Table("article").Select...("product_id as productid, count(*) as total,user.nickname as usernickname")....Joins("left JOIN user on user.id = product.uid").Group("product.uid").
使用 SQL 进行数据复制的时候,会有 SELECT INTO 和 INSERT INTO SELECT 两种语句用法,下面简单罗列一下大概的区别: 1.INSERT INTO SELECT 语句: INSERT...SELECT value1,value2,... FROM Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。...2.SELECT INTO FROM语句 INSERT INTO SELECT vale1, value2 into Table2 from Table1 要求目标表Table2不存在,因为在插入时会自动创建表
两种方式,分别查询数据有多少行: hive (gmall)> select * from ods_log; Time taken: 0.706 seconds, Fetched: 2955 row(s)...hive (gmall)> select count(*) from ods_log; 2959 两次查询结果不一致的原因分析 hive (gmall)> drop table if exists...所以在HDFS上的hive里存着lzo格式数据和lzo.index索引文件,这便于对文件进行切片。...但是select * from ods_log不执行MR操作,默认采用的是ods_log建表语句中指定的DeprecatedLzoTextInputFormat,能够识别lzo.index为索引文件。...select count(*) from ods_log执行MR操作,默认采用的是CombineHiveInputFormat,不能识别lzo.index为索引文件,将索引文件当做普通文件处理。
原标题:oracle的wm_concat()和mysql的group_concat()合并同列变成一行的用法以及和concat()合并不同列的区别 前言 标题几乎已经说的很清楚了,在oracle中,concat...()函数和 “ || ” 这个的作用是一样的,是将不同列拼接在一起;那么wm_concat()是将同属于一个组的(group by)同一个字段拼接在一起变成一行。...wm_concat()和concat()具体的区别 oracle中concat()的使用 和 oracle中 “ || ” 的使用 这两个都是拼接字段或者拼接字符串的功能。...oracle中: concat只能连接两个字符串或者两个字段,|| 可以多次使用,拼接n个字符串或者字段。.../*简单的合并同一个同学的课程*/ select stuid,wm_concat(coursename) from stu_score group by stuid ?
4 | +---------------+ ③count(distinct 列):返回列值非空的、并且列值不重复的行的数量 mysql> select count(distinct salary) from...规则: ①出现在SELECT子句中的单独的列,必须出现在GROUP BY子句中作为分组列 ②分组列可以不出现在SELECT子句中 ③分组列可出现在SELECT子句中的一个复合表达式中 ...,则可以合并group by和order by子句 mysql> select teamno,count(*) -> from MATCHES -> group by teamno...例1:对于每个球队,得到其编号和所有球员的编号 mysql> select teamno,group_concat(playerno) -> from MATCHES -> group...默认情况下,UNION = UNION DISTINCT ①进行合并的两个查询,其SELECT列表必须在数量和对应列的数据类型上保持一致; ②默认会去掉两个查询结果集中的重复行;默认结果集不排序
两者之间 between 关键字就是两者之间我来查询....4 | +---------------+ ③count(distinct 列):返回列值非空的、并且列值不重复的行的数量 mysql> select count(distinct salary) from...规则: ①出现在SELECT子句中的单独的列,必须出现在GROUP BY子句中作为分组列 ②分组列可以不出现在SELECT子句中 ③分组列可出现在SELECT子句中的一个复合表达式中 ...,则可以合并group by和order by子句 mysql> select teamno,count(*) -> from MATCHES -> group by teamno...默认情况下,UNION = UNION DISTINCT ①进行合并的两个查询,其SELECT列表必须在数量和对应列的数据类型上保持一致; ②默认会去掉两个查询结果集中的重复行;默认结果集不排序
然后再SELECT语句指定列 SELECT , …… FROM WHERE ; ⚙️运算符 算数运算符 加 (+)、减(-)、乘(*)、除(/)和取模(%)运算。...select -12 % -5 from dual -- -2 select 12 % -5 from dual -- 2 比较运算符 等号运算符 = 判断两个值,字符串和表达式是否相等。...() 可以提高优先级 真值 众所周知,真值有true和false两种,但是在SQL中还有一种UNKNOWN的情况。前者是二值逻辑,后者是三值逻辑。...时,COUNT(*)和COUNT()结果不同。...→ FROM → WHERE → GROUP BY → HAVING 例子: SELECT PROD,COUNT(*) FROM myTable GROUP BY PROD HAVING COUNT
查询整表数据 select * from t1; *代表所有的列,也可以把所有的列都写上 也可以查询部分列,性能没有保证 表大要加过滤条件(生产中要禁止使用) select 配合 from + where...count() , sum() , avg(), max(), min(), group_concat() 统计每个国家有多少城市 select countrycode,count(*) from world.city...2然后按照国家代码分组 3先把每个国家有多少城市加起来 然后group_concat类似于列转换行 不然不符合sql_mode标准 要求要么在group by后 要么在聚合函数中 执行逻辑 select...by 条件升序排序 3针对 group by 分组,去重复 变成 4然后 把每个分组对应的数据行进行count(数一下组内有多少行) 5然后在group_concat 列转换成行显示按照,分割 统计city...谁来做过滤条件 统计每个学生学习课程的门数 1这里有陷阱,需要两张表就行了需要学生表和成绩表(因为学生,学了这门课就会有成绩) 1 select student.sname,count(*) from
上面的两个最值函数会自动忽略掉值为NULL的行 4、SUM()函数 返回指定列值的和(总计) SELECT SUM(quantity) AS items_ordered FROM OrderItems...FROM Products; 分组数据 分组使用的是两个子句: GROUP BY() HAVING() 创建分组 分组是使用SELECT子句的GROUP BY子句建立的,看个例子: SELECT vend_id...,COUNT(*) AS num_prods FROM Products GROUP BY vend_id; -- 分组的列 GROUP BY子句使用时候的常见规定: GROUP BY子句可以包含任意数目的列...,可以对分组进行嵌套 GROUP BY子句中列出的每一列都是检索列或者有效的表达式(但是不能是聚集函数) 如果在SELECT中使用表达式,则必须在GROUP BY子句中使用相同的表达式,而不是使用别名...BY vend_id HAVING COUNT(*) >= 2; -- 分组后再执行,找出数目大于2的数据 分组和排序 ORDER BY 和GROUP BY的差异: ORDER BY GROUP BY
大致分为两类:SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。SQL Scalar 函数基于输入值,返回一个单一的值。..." 和 "count":SELECT site_id, count FROM access_logWHERE count > (SELECT AVG(count) FROM access_log);2、...查找 "access_log" 表的 "count" 字段的总数:SELECT SUM(count) AS nums FROM access_log;6、SQL GROUP BY 语法GROUP BY...where 和having之后都是筛选条件,但是有区别的:(1)where在group by前, having在group by 之后(2)聚合函数(avg、sum、max、min、count),不能作为条件放在...AND count > 200);9、SQL UNION 操作符SQL UNION 操作符合并两个或多个 SELECT 语句的结果。
分组数据 group by 分组数据主要是靠group by 和 having子句来实现的。...select vend_id, count(*) as num_prods -- * 表示统计总数,起别名 from products group by vend_id group by子句的相关规定...where prod_price >= 4 -- 过滤价格 group by vend_id having count(*) >= 2; -- 过滤分组之后的计数 笔记:having和group...Order by 和group by 区别 Order by group by 对产生的输出排序 对行分组,但是输出可能不是分组的顺序 任意的列都可以使用 只能使用选择列或者表达式列 不一定需要 如果是和聚合函数一起使用列...group by和order by子句最好结合使用 select order_num, count(*) as items from orderitems group by order_num
()函数{avg()函数忽略列值为NULL的行}; 2、count()函数 count()函数进行计数,可利用count()确定表中行的数目或符合特定条件的行的数目; count()函数有两种使用方式:...二、分组数据 1、group by创建分组 在MySQL中,分组是在select语句中的group by子句中建立的,比如: select vend-id,count(*) as num_prods from...(但不能是聚集函数),如果在select中使用表达式,则必须在group by子句中指定相同的表达式(不能使用别名); ④除了聚集计算语句外,select中每个列都必须在group by子句中给出; ⑤...) having和where可以同时使用,比如: select vend_id, count(*) as num_prods from products where prod_price>=10 group...2或2以上的分组; 3、分组和排序 group by和order by的区别: ?
group by 的执行的过程,先执行select 的操作返回一个程序集, --然后去执行分组的操作,这时候他将根据group by 后面的字段 --进行分组,并且将相同的字段并称一列数据,如果group...--但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的 --数据系统不知道将数据放入哪里,所以就出现此错误 --目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的...–但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的 –数据系统不知道将数据放入哪里,所以就出现此错误 –目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的...--但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的 --数据系统不知道将数据放入哪里,所以就出现此错误 --目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的...–但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的 –数据系统不知道将数据放入哪里,所以就出现此错误 –目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的
下面介绍分组数据: 返回每个供应商提供的产品数目: select COUNT(*) as num_prods,vend_id from products GROUP BY vend_id 使用group...如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式。不能使用别名。 除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出。...select COUNT(*) as num_prods,vend_id from products GROUP BY vend_id HAVING COUNT(*)>2 那么,有没有在一条语句中同时使用...select COUNT(*) as num_prods,vend_id from products where prod_price>=10 GROUP BY vend_id 下面介绍一下order...例如:: select COUNT(*) as num_prods,vend_id from products where prod_price>=10 GROUP BY vend_id ORDER BY
领取专属 10元无门槛券
手把手带您无忧上云