目录
一、概述
DQL语句指的是数据查询语句, 主要是对 表数据进行查询操作的.
细节
1. HQL的代表查询格式 较之于 MySQL的单表查询格式, 有3处不同.
A. HQL 可以支持 CTE表达式.
B. HQL 筛选列的时候可以写 all 或者 distinct
C. HQL 支持分桶查询.
2. distribute by 表示分桶, sort by表示桶内排序, 如果 分桶字段 和 排序字段是同一个字段, 则可以用cluster by实现.
即: cluster by 分桶排序字段 = distribute by 分桶字段 + sort by 桶内排序字段
二、查询语句
1.简单查询
过滤出广东省订单
select * from orders where userAddress like '%广东%';
找出广东省单笔营业额最大的订单
select * from orders where userAddress like '%广东%' order by totalMoney desc limit 1;
2.聚合、分组查询
在已付款订单中,统计每个用户最高的一笔消费金额
select userId, max(realTotalMoney) realTotalMoney_max from orders where isPay=1 group by userId;
统计每个用户的平均订单消费额
select userId, round(avg(realTotalMoney), 2) realTotalMoney_avg from orders group by userId;
统计每个用户的平均订单消费额,过滤大于10000的数据
方式1: 直接把处理聚合函数的动作, 再写一份放到 having后, 即: 不采用别名的方式.
select
userId, round(avg(realTotalMoney), 2) realTotalMoney_avg
from orders
group by userId
having round(avg(realTotalMoney), 2) > 10000;
方式2: 子查询
select * from (
selectuserId,round(avg(realTotalMoney), 2) realTotalMoney_avg
from
orders
group by
userId
) t1
where realTotalMoney_avg > 10000;
方式3: CTE表达式, 把结果临时用CTE存储, 然后再次查询
with t1 as (
select
userId, round(avg(realTotalMoney), 2) realTotalMoney_avg
from orders
group by userId
)
select * from t1 where realTotalMoney_avg > 10000;