每天五行代码

MySQL必知必会12-14 汇总 分组 子查询

2018-01-13  本文已影响12人  废柴社

12 汇总数据-用聚集类函数

用于诸如:表中的行数、表中行组的和、列中的最大值平均值等。
(python的dataframe 在输出此类结果时有优势)

MySQL 五个聚集函数(其它还有:标准偏差聚集函数等)

SELECT AVG(alltotal) FROM yc_tmp;
SELECT MAX(alltotal),MIN(alltotal) FROM yc_tmp

# 若只聚集不同的值,用distinct-- p ;

13 分组和排序

13.1 分组 Group by

SELECT province,Max(alltotal) as max_total
    ,AVG(alltotal) as avg_total FROM yc_tmp
group by province;

13.2 过滤分组 having

having过滤分组,而where只过滤行。
二者用法相同,功能也类似。having可以替代where的功能

SELECT province,Max(alltotal) as max_total
    ,AVG(alltotal) as avg_total FROM yc_tmp
group by province
having avg_total >1000;

也会有同时使用的情形。
另外:用where是先过滤,再分组计算,having是分组计算后再过滤

SELECT province,Max(alltotal) as max_total
    ,AVG(alltotal) as avg_total FROM yc_tmp
where province not in ('陕西','湖北')
group by province
having avg_total >1000
order by avg_total;
未排序结果

13.3 排序 order by

group by 出来的结果有时看起来是按分组排序的,但SQL并无此机制,故:若需要排序结果,必需用order by 指明。

排序结果

语句顺序:

Select
from
where
group by
having
order by
limit

14 子查询

子查询可用来:

实现过滤的用法

一般顺序:先从B表中查询到需要的数据
再把该数据结果,放在下一个查询语句中使用。
子查询可以将这两个过程嵌套起来。

Select cust_id 
from orders
Where order_num in  ( select order_num 
                       from  orderitems
                        Where prod_id = 'TNT2') ;  

子查询可以多级嵌套,在使用时建议使用多行,并且适当缩进
注意效率,比对项较多时,速度会慢……

实现字段计算

即正常查询语句中的某一字段,是从其它表中查询过来的。

select cust_name,
         (select count(*) 
       from orders
       Where orders.cust_id = customers.cust_id ) as orders
from customers
上一篇 下一篇

猜你喜欢

热点阅读