当前位置: 首页 > news >正文

MySQL | 数据查询DQL语言:分组统计

统计函数

▲ count(*)

统计查询结果集返回的行数.

#统计客户表中客户人数
SELECT COUNT(*) FROM ecs_users;
#统计商品售价大于500的产品数量
SELECT COUNT(*) FROM ecs_goods
WHERE shop_price > 500;

左右拉动查看完整代码

▲ count(ve)

统计值表达式返回的非空值的个数.

#找出设置了密码提示问题用户人数
SELECT COUNT(*)
FROM ecs_users
WHERE passwd_question IS NOT NULL;SELECT COUNT(passwd_question) FROM ecs_users;

左右拉动查看完整代码

▲ count(distinct ve)

统计值表达式返回的非空不同值的个数.

#统计商品表中有多少种产品类型
SELECT COUNT(DISTINCT goods_type) FROM ecs_goods;

左右拉动查看完整代码

▲ sum(ve)

统计值表达式返回的非空值的和.

▲ sum(distinct ve)

统计值表达式返回的非空不同值的和.​​​​​​​

#统计24号商品的销售数量
SELECT SUM(goods_number) FROM ecs_order_goods
WHERE goods_id = 24;
#统计被购买过的商品的价格之和
SELECT SUM(DISTINCT goods_price)
FROM ecs_order_goods;

左右拉动查看完整代码

▲ avg(ve)

统计值表达式返回的非空值的平均值.

▲ avg(distinct ve)

统计值表达式返回的非空不同值的平均值.​​​​​​​

#统计商品表中类型为9的商品的平均市场价格
SELECT AVG(market_price) FROM ecs_goods
WHERE goods_type = 9;
#统计商品表中类型为9的商品的不同价格的平均值
SELECT AVG(distinct market_price) FROM ecs_goods
WHERE goods_type = 9;

左右拉动查看完整代码

▲ max(ve)

统计值表达式返回的非空值的最大值.

▲ min(ve)

统计值表达式返回的非空值的最小值.​​​​​​​

#统计商品表中商品的最大市场价格与最小市场价格
SELECT max(market_price),MIN(market_price)
FROM ecs_goods;
    #统计产品表中具有最大价格与最小价格的产品信息
    SELECT *
    FROM ecs_goods
    WHERE market_price = (SELECT MAX(market_price) FROM ecs_goods)
    OR market_price = (SELECT MIN(market_price) FROM ecs_goods);

    左右拉动查看完整代码

    数据分组

    1分组的引入​​​​​​​

    #统计每种类型的商品的最大市场价格
    SELECT distinct goods_type FROM ecs_goods;
    #type 1
    SELECT MAX(market_price) FROM ecs_goods
    WHERE goods_type = 1;
    #type 2
    SELECT MAX(market_price) FROM ecs_goods
    WHERE goods_type = 2;
    ...

    左右拉动查看完整代码

    2分组定义

    指定某列或某些列作为划分的依据,比较这些列值是否相同,具有相同列值的行放在同一组,这样就可以将最初的结果集划分为若干个子集,每个子集称为一个分组.

    一般来说有多少个不同的列值就可以分为多少组.​​​​​​​

    group 分组
    by 依据 ...
    group by col_name;
    group by c1,c2,...,cn;
      #按照商品类型分组
      SELECT goods_type
      FROM ecs_goods
      GROUP BY goods_type;
        #在ecs_order_info表中查看不同用户选择的寄送方式
        SELECT user_id,shipping_id
        FROM ecs_order_info
        GROUP BY user_id,shipping_id;

        左右拉动查看完整代码

        分组后统计

        语法:​​​​​​​

        select ...,stat_function(ve),...#stat_function统计函数ve列或计算列
        from tabs
        where search_condition
        group by c1,c2,...,cn;

        左右拉动查看完整代码

        指定某列或计算列作为统计的对象,将统计函数作用在该对象上,统计函数按照分组自动对每一分组的列值进行统计,每一分组返回一个统计后的结果.​​​​​​​

        #统计每种类型的商品的最大市场价格
        SELECT * FROM ecs_goods;SELECT goods_type,MAX(market_price)
        FROM ecs_goods
        GROUP BY goods_type;
        #类型编号不太直观,将编号转换为对应的类型名称显示
        SELECT gt.cat_name,MAX(market_price)
        FROM ecs_goods g INNER JOIN ecs_goods_type gt
        ON g.goods_type = gt.cat_id
        GROUP BY gt.cat_name;

        左右拉动查看完整代码

        MYSQL对GROUP BY的非ANSI标准扩展​​​​​​​

        #统计每种类型的产品的最大价格
        SELECT * FROM products;SELECT goods_type,goods_name,MAX(market_price)
        FROM ecs_goods
        GROUP BY goods_type;
        #MySQL扩展了GROUP BY的用途,可以在SELECT列表中使用GROUP BY子句中未出现过的列
        #这在其他数据库(比如Oracle)中是不允许的.
          #统计每种类型下每种商品的销售总额
          SELECT * FROM ecs_goods;
          SELECT * FROM ecs_goods_type;
          SELECT * FROM ecs_order_goods;
          #统计之前的数据
          SELECT gt.cat_name, g.goods_name, og.goods_price, og.goods_number
          FROM (ecs_goods g INNER JOIN ecs_goods_type gt ON g.goods_type = gt.cat_id)
          LEFT OUTER JOIN ecs_order_goods og
          ON g.goods_id = og.goods_id
          ORDER BY 1, 2;
          #统计之后的数据
          SELECT gt.cat_name,
          g.goods_name,
          IFNULL(SUM(og.goods_price * og.goods_number), 0) amount
          FROM (ecs_goods g INNER JOIN ecs_goods_type gt ON g.goods_type = gt.cat_id)
          LEFT OUTER JOIN ecs_order_goods og
          ON g.goods_id = og.goods_id
          GROUP BY gt.cat_name, g.goods_name
          ORDER BY 1, 2;
          #IFNULL(p1,p2) 若p1为null,则输出p2;否则输出p1

          左右拉动查看完整代码

          若统计的数据来源于多个表中,需要将多个表连接起来再进行分组统计.

          统计后过滤

          是由having子句来实现的.

          语法:​​​​​​​

          select list
          from tabs
          where search_condition #过滤原始数据
          group by grouping_columns
          having search_condition; #过滤分组统计后的数据

          左右拉动查看完整代码

          若要使用having来过滤数据,则必须先使用group by进行分组.

          having的用法与where用法相似.​​​​​​​

          #哪些类型的商品的平均市场价格超过了1000
          SELECT gt.cat_name, ROUND(AVG(market_price), 2)
          FROM ecs_goods g
          INNER JOIN ecs_goods_type gt
          ON g.goods_type = gt.cat_id
          GROUP BY gt.cat_name
          HAVING AVG(market_price) > 1000;
          #round(p1,p2) 对p1进行四舍五入,精确到p2位,p2>0小数点后,p2<0小数点前

          左右拉动查看完整代码

          having子句中的子查询​​​​​​​

          #哪些类型的商品的平均市场价格超过了所有产品的市场均价
          SELECT gt.cat_name, ROUND(AVG(market_price), 2)
          FROM ecs_goods g
          INNER JOIN ecs_goods_type gt
          ON g.goods_type = gt.cat_id
          GROUP BY gt.cat_name
          HAVING AVG(market_price) > (SELECT AVG(market_price) FROM ecs_goods);

          左右拉动查看完整代码

          今天的内容就学习到这里了,每个工作日小编都会更新一个有关测试的小知识,希望大家多多关注我们,一起来学习喔!

          http://www.dtcms.com/a/548512.html

          相关文章:

        • 阿里云灵码IDE技术测评:从v0.1.0到v0.1.5的进化之路
        • 江门网站推广技巧asp网站服务建设
        • C++: inline 与 ODR,冲突的诞生
        • 营销型 展示类网站企业网站建设空间
        • 从单体到微服务:Java的分布式演进与工程实战
        • 【论文笔记】扩散模型——如何通俗理解传统概率模型的核心矛盾
        • android15 实现截屏功能
        • 工业4.0数据中枢:重构产品全生命周期的智能设计范式
        • 深度解析《AI+Java编程入门》:一本为零基础重构的Java学习路径
        • 架构论文《论数字孪生系统架构设计与应用》
        • 郑州网站建设汉狮如何让百度收录自己的网站信息
        • 英一2017年真题学习笔记
        • PaddleOCR-VL对标DeepSeek-OCR?
        • DeepSeek-OCR 论文精读与实践:用“光学上下文压缩”把长文本变成图片,再由 VLM 高效还原
        • 创新网站内容建设企业建网站的案例
        • 沈阳建站模板系统包括如何自己创建一个网页
        • NLP模型优化
        • 运行当前位置,显示文件全名,检查是否扩展名多次重叠
        • 基于ubuntu22构建spark镜像 —— 筑梦之路
        • Iterable<Result<Item>>讲一下
        • mstscax!CMCS==MCSSendConnectInitial函数分析之mstsc.exe源代码分析第二次交互
        • 分享MATLAB在数据分析与科学计算中的高效算法案例
        • 数据分析-62-时间序列分析之上升下降平稳趋势分析
        • 12.集合介绍以及数组的使用选择
        • linux使用pipx
        • 顺德制作网站价格多少百度搜索页
        • WebSocket子协议STOMP
        • 品牌网站制作流程图抓取网站后台
        • 堆内存与栈内存的所有权管理:Rust 内存安全的底层逻辑
        • 从零开始的C++学习生活 18:C语言复习课(期末速通)