spark sql小知识

AND和OR:

AND:表示两个条件都达成。

OR:表示两个条件其一达成。

AND和OR可以任意组合,但要注意,数据库会先执行AND再计算OR,就像先乘除后加减一样。

例子:

SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR vend_id=1003 AND prod_price>=10;

该语句查出的是,vend_id=1002或者vend_id=1003且prod_price>=10的数据,即等同于:

SELECT prod_name,prod_price FROM products WHERE vend_id=1002 OR (vend_id=1003 AND prod_price>=10);

 解决方法:加入(),标明执行顺序,防止因为执行顺序错误而导致数据出错。

 

ORDER BY:

ORDER BY用于排序,当用于多条件排序时,即对多列进行排序时,是根据写的顺序进行依次排序的。

例子:

SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price,prod_name;

该语句的排序是,先根据prod_price进行排序,如果有prod_price相同,才使用其prod_name进行排序。也就是说,如果该表中不存在具有相同prod_price值的数据,呢么加不加prod_name的结果是一样的。

ASC(默认):升序      

DESC:降序

两个关键字只作用于直接位于它前面的列名。

例子:

SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC,prod_name;

该语句的排序是,先根据prod_price进行降序排序,如果有prod_price相同,才使用其prod_name进行升序排序。即DESC只对

prod_price 有作用,prod_name依旧是默认的升序。

若要使多个列都按降序排序,则需要每个列后都加DESC。

SELECT prod_id,prod_name,prod_price FROM products ORDER BY prod_price DESC,prod_name DESC;

 

SUM,AVG等:

当数据是分组的时候,即GROUP BY 的时候,其值是计算整个组的值,当数据是通过窗口函数分窗口的时候,其值是逐条计算出来的。

例如对一个组内有10条数据的使用SUM,呢么10条数据的SUM值都是一样的,即全部加起来,而分组使用SUM,第一条的结果等于它本身,第二条等于第一条加第二条,第三条等于第一条加第二条加第三条,依此类推,最后第十条的结果便是与分组SUM的结果相同。

 

GROUP BY:

分组语句,可以对数据进行分组计算,即可对每个分组中的数据各自进行平均值等计算

使用 ROLLUP 使用 WITH ROLLUP 关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值,

在具体使用 GROUP BY 子句前,需要知道一些重要的规定。

  •  GROUP BY 子句可以包含任意数目的列。这使得能对分组进行嵌套,为数据分组提供更细致的控制。

 

  •  如果在 GROUP BY 子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
  •  GROUP BY 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在GROUP BY 子句中指定相同的表达式。不能使用别名。
  •  除聚集计算语句外, SELECT 语句中的每个列都必须在 GROUP BY 子句中给出。
  •   如果分组列中具有 NULL 值,则 NULL 将作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。
  •  GROUP BY 子句必须出现在 WHERE 子句之后, ORDER BY 子句之前。

 

having与where的区别:

having:对组进行过滤

where: 对行进行过滤

 WHERE 在数据分组前进行过滤, HAVING 在数据分组后进行过滤。这是一个重要的区别, WHERE 排除的行不包括在分组中。这可能会改变计算值,从而影响 HAVING 子句中基于这些值过滤掉的分组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值