MySQL——group by、嵌套

一、group by

对完整的数据表进行划分子表,划分的依是,指定数据列中值一样的会被划分到同一个子表中,然后使用聚合函数对子表中的数据进行计算比如获取每一生产商定价最高的产品等~

注意事项

1.可以使用单个列,多个列组合,甚至是对列的计算结果
2.分组的依据必须是可以从数据表中获得的数据
3.分组之后是针对子表数据进行操作,不会在显示单行数据等,或者说不能完整的查看单个子表的数据
4.select后面除了聚合函数处理的部分外,最好选取的列都出现在group by子句中

5.NULL 空也会被归类为一种值,所有NULL的行被分到一张子表中
6.group by 出现在where 后,order by 前面

不支持后面加聚合函数,可以再前面加,不适用并列后分组,

格式:select 列名 count(*)from 表名 group by 列名 条件;

二、条件筛选

格式:select 列名 count(*)from 表名where 条件 group by 列名having 条件 order by 列名;

 三、实验

orderltems表包含每个订单的单独项目。编写一条SQL语句,返回每个订单号(order_num)的行数(作为order_lines),并按order_lines对结果排序。

编写一条SQL语句,返回一个名为cheapes_item的字段,其中包含每个供应商的最低成本项目(使用Producrs表中的prod-price),并将结果从最低成本到最高成本排序。

找到最好的客户很重要。编写一条SOL语句,为至少100项的每个订单返回订单号(orderlems表中的order num)。

另一种确定最佳客户的方法是根据他们花了多少钱。编写一条SQL语句,返回总价至少为1000的每个订单的订单号(0rderitems表中的order_num)。这里有一个提示:对于这个,你需要计算并求和total(item_price乘以guantiy)。按订单号对结果进行排序。

四、嵌套

格式:select 展示列 from 表名 where 列名A in ( 查询列名A的信息 );

条件嵌套

三层嵌套

将查询作为结果展示

格式:select 列名,(展示的数据 from 表1 where 表2.相同列=表2.相同列)as 别名 from 表1;

五、嵌套实验

1.使用子查询 ,返回购买了价格为 10 或以上的商品的客户列表。您需要使用0rdkrltems表来查找匹配的订单号(order_num),然后使用Orders表来检索每个匹配订单的客户 ID(cust_id) 。

select distinct cust_id from  orders  where order_num in (  select order_num from orderitems where item_price >= 10) ;
2.  您需要知道订购产品  BR01  的日期。编写一条  SQL  语句,使用子查询来确定哪些订单(在
OrderItems  中) 购买了 prod_id BR01的商品,然后返回客户  ID  (cust_id) 以及 订单 中每个订单的订单日期(order_date) 。按订单日期对结果进行排序。
select order_date from orders where order_num in(select order_num from orderitems where prod_id = 'ANV01');
3.  现在让我们增加一点挑战性。更新之前的挑战,以返回 购买 prod_id 为  BR01 的商品的任何客户的 客户电子邮件
(客户 中的 cust_email) 。 这里有一个提示:这涉及到SELECT 语句,最里面的查询从OrderItems 返回 order_num ,中间的查询从 Customers  返回
select cust_email from customers where cust_id in(
select cust_id from orders
 where order_num in(select order_num from orderitems where prod_id = 'ANV01'));
4.  您需要一个客户  ID  列表以及每个客户订购的总金额。
语句,最里面的查询从OrderItems 返回 order_num ,中间的查询从 Customers  返回 cust_id 。
以及 订单 中每个订单的订单日期(order_date) 。按订单日期对结果进行排序。
编写一条  SQL  语句,返回客户  ID  ( Orders 中的 cust_id ) 和total_ordered ,并使用子查询返回每个客户的订单总数。按支出金额从最大到最小对结果进行排序。这里有一个提示:您之前已经使用SUM()来计算订 单总数。
5.  编写一条  SQL  语句, 从数据库中检索所有产品名称(prod_name)
Products表,以及名为quant_sold 的计算列, 其中包含已售商品的总数(使用子查询和OrderItems 上的SUM(quantity) 进行检索)。
select prod_name,(select sum(quantity)  from  orderitems where
orderitems.prod_id=products .prod_id ) as  quant_sold from products ;

  • 26
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值