Hive 语法使用记录

count

count是一种最简单的聚合函数,一般也是我们第一个开始学习的聚合函数,那么他们之间究竟由什么区别呢?

有的人说count(1)和count(*)他们之间有区别,而有的人说他们之间没有区别那么他们之间到底有没有区别呢。

从执行结果来说:

    count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值,

     但count(列名)就有区别了,因为count(列名)会去过滤空值。

从执行效率来说:

     他们之间根据不同情况会有些许区别,MySQL会对count(*)做优化。

     (1)如果列为主键,count(列名)效率优于count(1)  

     (2)如果列不为主键,count(1)效率优于count(列名)  

     (3)如果表中存在主键,count(主键列名)效率最优  

     (4)如果表中只有一列,则count(*)效率最优  

      (5)如果表有多列,且不存在主键,则count(1)效率优于count(*)

补充关于count(1)count(*)原理 引用百度知道专业回答

count(1),其实就是计算一共有多少符合条件的行。
1并不是表示第一个字段,而是表示一个固定值。
其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.

count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。

having函数,case when与order by

having:用于筛选分组后的各组数据。
聚合函数,和group by一起使用(where不能和聚合函数使用)
group by放在order by前使用,放在之后报错
SELECT user_id from user_role r GROUP BY r.user_id HAVING COUNT(r.role_id)>=4 ORDER BY user_id DESC; 查询role_id大等于4的user_id

case when与order by,自己设置排序规则
SELECT * FROM user WHERE state=1
ORDER BY
(
CASE name
WHEN ‘总部管理员’ THEN 1
WHEN ‘机构管理员’ THEN 2
WHEN ‘主管’ THEN 3
ELSE 4
END
) ASC

Case When Then Else End 多条件判断

https://www.cnblogs.com/gengyufei/p/12614387.html

select substr(key,13,2),
case when birthday<‘1968’ then ‘50up’
when birthday<‘1978’ then ‘40-50’
when birthday<‘1983’ then ‘35-40’
when birthday<‘1988’ then ‘30-35’
when birthday<‘1992’ then ‘26-30’
when birthday<‘1998’ then ‘20-25’
else ‘other’ end,
count(1)
from hiveTable
group by substr(key,13,2),
case when birthday<‘1968’ then ‘50up’
when birthday<‘1978’ then ‘40-50’
when birthday<‘1983’ then ‘35-40’
when birthday<‘1988’ then ‘30-35’
when birthday<‘1992’ then ‘26-30’
when birthday<‘1998’ then ‘20-25’
else ‘other’ end

case when/having/自连接/时间窗口

https://blog.csdn.net/a550246215/article/details/108166635

where 1=1或2的作用

where 后面表示过滤的条件,只有满足条件的记录才被选择,因为条件(1=2)为假,
所以整句话其实就是什么都不选择,比如我要建一个和表a相同结构的表b 但我不要数据就可以:

select * into 表b from 表a where 1=2

这样实现了拷贝一个表结构的目的;

如果条件是“1=1”就是选择所有记录。

写 where 1=1 就是为了在编程语言中使用,在语言中可能用户输入条件,也有可能不输入条件,这时可以这样:

如果输入了条件则为 and 字段=变量值,如果没有输入则为空值
组合后变成:select * from tablename where 1=1 and 字段=变量值

或 select * from tablename where 1=1

Hive中count,sum的使用

https://blog.csdn.net/yjgithub/article/details/84568542

left join 和 left outer join 的区别

https://www.cnblogs.com/williamjie/p/9498032.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值