有关Hive对数据库的常见操作(三)

博客围绕数据库操作展开,介绍了基本查询,如查询所有、单列、数据量等,还涉及过滤特定地区订单、统计消费金额等;讲解了在Hive中使用正则表达式进行数据匹配的方法;最后介绍了UNION将多个SELECT语句结果组合成单个结果集的用法。

一,基本查询

1.查询所有

        SELECT * FROM itheima.orders;

2.查询单列

        SELECT orderid, totalmoney, username, useraddress, paytime FROM itheima.orders;

3.查询数据量

        SELECT COUNT(*) FROM itheima.orders;

4.过滤广东省订单

        SELECT * FROM itheima.orders WHERE useraddress LIKE '%广东%';

5.找出广东省单笔营业额最大的订单

        SELECT * FROM itheima.orders WHERE useraddress like '%广东%' ORDER BY totalmoney DESC LIMIT 1;

6.统计未支付、已支付各自的人数

        SELECT ispay, COUNT(*) AS cnt FROM itheima.orders GROUP BY ispay;

7.在已付款订单中,统计每个用户最高的一笔消费金额

        SELECT userid, MAX(totalmoney) AS max_money FROM itheima.orders WHERE ispay = 1 GROUP BY userid;        

8.统计每个用户的平均订单消费额

        SELECT userid, AVG(totalmoney) FROM itheima.orders GROUP BY userid;

9.统计每个用户的平均订单消费额,过滤大于10000的数据

        SELECT userid, AVG(totalmoney) AS avg_money FROM itheima.orders GROUP BY userid HAVING avg_money > 10000;

10.JOIN订单表和用户表,找出用户名

        SELECT o.orderid, o.userid, u.username, o.totalmoney, o.useraddress, o.paytime FROM itheima.orders o JOIN itheima.users u ON o.userid = u.userid;

11.左外关联,订单表和用户表,找出用户名

        SELECT o.orderid, o.userid, u.username, o.totalmoney, o.useraddress, o.paytime FROM itheima.orders o LEFT JOIN itheima.users u ON o.userid = u.userid;

二,正则表达式

Hive中提供RLIKE关键字,可以供用户使用正则和数据进行匹配。

1.查找广东省的数据

SELECT * FROM itheima.orders WHERE useraddress RLIKE '.*广东.*';        

2.查找用户地址是:xx省 xx市 xx区的数据

        SELECT * FROM itheima.orders WHERE useraddress RLIKE '..省 ..市 ..区';

3.查找用户姓为张、王、邓

          SELECT * FROM itheima.orders WHERE username RLIKE '[张王邓]\\S+';

4.查找手机号符合:188****0*** 规则

        SELECT * FROM itheima.orders WHERE userphone  RLIKE '188\\S{4}0\\S{3}';

三,UNION

        UNION 用于将多个 SELECT 语句的结果组合成单个结果集。 每个 select 语句返回的列的数量和名称必须相同。否则,将引发架构错误。

        基础语法: SELECT ...    

                                UNION [ALL]

                           SELECT ...

UNION默认有去重功能:

如果不需要去重效果加上ALL

SELECT t_id, COUNT(*) FROM (     

        SELECT t_id FROM itheima.course WHERE t_id = '周杰轮'         

                UNION ALL     

        SELECT t_id FROM itheima.course WHERE t_id = '王力鸿' )

        AS u GROUP BY t_id;

用于INSERT SELECT中

CREATE TABLE

itheima.course2 LIKE itheima.course;

INSERT OVERWRITE TABLE itheima.course2    

        SELECT * FROM itheima.course     

        UNION ALL    

        SELECT * FROM itheima.course;

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值