SELECT查询的应用(三)
浏览:51日期:2023-05-21
分类汇总 结构化查询(SQL)的另一个强大的功能是分类汇总,也就是GROUP子句;MySQL当然也提供这个功能。现在还以我在《SELECT查询的应用(二)JOIN子句的用法》中的数据库为例说说GROUP子句的用法。 一、查询每个客户的交易次数。COUNT()是一个与GROUP子句一起使用的函数,它的作用是计数: SELECT customer,COUNT(*) AS sale_count FROM sales GROUP BY customer 返回的查询可能结果为: +----------+------------+ | customer | sale_count | +----------+------------+ |;;;;1 |;;;;;1 | +----------+------------+ |;;;;2 |;;;;;1 | +----------+------------+ 表示了代码为1和2的两个客户分别有一次交易。 二、查询每个客户的交易总额。SUM()是一个与GROUP子句一起使用的函数,它的作用是求和: SELECT customer,SUM(price*amount) AS total_price FROM sales GROUP BY customer 返回的查询结果可能为: +----------+-------------+ | customer | total_price | +----------+-------------+ |;;;;1 |;;12000.00 | +----------+-------------+ |;;;;2 |;;12000.00 | +----------+-------------+ 表示了代码为1和2的两个客户各有12000元的交易额。其中SUM(price*amount)表示先将price和amount即单价和数量相乘后再求和,亦即总价。 三、查询每个客户的平均每次交易额。AVG()是求平均值的函数: SELECT customer,AVG(price*amount) AS avg_price FROM sales GROUP BY customer 返回的查询结果可能为: +----------+-----------+ | customer | avg_price | +----------+-----------+ |;;;;1 | 12000.00 | +----------+-----------+ |;;;;2 | 12000.00 | +----------+-----------+ 表示了代码为1和2的两个客户的平均每次交易的交易额都是12000元。由于我预设的数据量比较小,查询的结果不甚明显,请读者谅解。可以随意向sales表中添加一些数据,数据量越大,结果越明显。 四、查询每个客户最大的和最小的一笔成交额。MAX()和MIN()函数分别是取最大值和最小值的函数: SELECT customer,MAX(price*amount) AS max_price,MIN(price*amount) AS min_price FROM sales GROUP BY customer 返回的查询结果可能为: +----------+-----------+-----------+ | customer | max_price | min_price | +----------+-----------+-----------+ |;;;;1 | 12000.00 | 12000.00 | +----------+-----------+-----------+ |;;;;2 | 12000.00 | 12000.00 | +----------+-----------+-----------+ 五、查询每一种货物售出的平均价格。 SELECT good_code,avg(price) AS avg_price FROM sales GROUP BY good_code 对么?不对!这样查询到的是每种货物各条销售记录中价格的平均值,并不是实际售出的所有该货物的平均价格;对我们来说,有用的是按照销售数量加权平均的价格: SELECT good_code,sum(price*amount)/sum(amount) AS avg_price FROM sales GROUP BY good_code 返回的查询结果可能为: +-----------+-----------+ | good_code | avg_price | +-----------+-----------+ |;;;A0001 |;;1200.00 | +-----------+-----------+ 六、查询售给不同客户的每一种货物售出的平均价格。只要在GROUP子句中多加一个关键字: SELECT good_code,customer,sum(price*amount)/sum(amount) AS avg_price FROM sales GROUP BY good_code,customer 返回的查询结果可能为: +-----------+----------+-----------+ | good_code | customer | avg_price | +-----------+----------+-----------+ |;;;A0001 |;;;;1 |;;1200.00 | +-----------+----------+-----------+ |;;;A0001 |;;;;2 |;;1200.00 | +-----------+----------+-----------+ 所有客户和所售货物两项相同的记录汇总到一起来求平均,就形成了售给不同客户的每一种货物售出的平均价格。
上一条:SELECT查询的应用(二)下一条:事务日志被填满的原因是什么?
相关文章:
热门推荐
- jQuery获取浏览器类型和版本号的方法
- 1.怎么用js确定鼠标的当前位置坐标?
- 2.meta http-equiv='X-UA-Compatible' content='IE=7' 意思是将IE8用IE7进行渲染
- 3.一文带你入门JDK8新特性——Lambda表达式
- 4.PHP开发大型PHP项目的方法(一)
- 5.配合QMAIL邮件系统:SOLARIS + HTTPD + MYSQL + PHP + LIMITIP
- 6.浅析NIO系列之TCP
- 7.在数据库里取前10条数据
- 8.用ports安裝apache13_modssl+mysql+php+phpmyadmin
- 9.构建高并发高可用的电商平台架构实践(二)——架构剖析
- 10.C语言强制类型转换怎么做?