使用 MySQL 创建直方图 – 教程

要使用 mysql 创建统计查询来构建直方图,您可以使用 count() 函数和 group by 来计算分组约束创建的指定范围或类别内的值的出现次数。

特别是对于时间序列数据,直方图有很多用例,例如监控过去 30 天内每天注册的用户数量。我们在管理后端使用这些查询来监控一些重要的 kpi。

不幸的是,sql 数据库从来没有对表示直方图的本机支持,但它们是用于跟踪各种指标的最常用图表之一。

在本文中,我将向您展示如何为此目的创建查询并克服一些限制。假设您有一个名为 sales 的表,其中包含名为 sale_date 的列,其中包含每次销售的日期和时间。您想要创建一个直方图,显示每月间隔内的销售额分布情况。

select     date_format(sale_date, '%y-%m') as sales_month,    count(*) as countfrom     salesgroup by     date_format(sale_date, '%y-%m');

在此查询中:

date_format(sale_date, ‘%y-%m’) 将 sale_date 列格式化为年月格式(例如,“2024-01”表示 2024 年 1 月)。count(*) 统计每个月内发生的销售次数。from sales 指定从中检索数据的表。group by date_format(sale_date, ‘%y-%m’) 根据格式化的销售日期将销售数据按月分组。

此查询将为您提供每个月间隔内的销售发生次数,允许您创建直方图以可视化销售随时间的分布情况。

如何填补直方图查询中的空白
运行此查询,您可能会在结果集中看到一些缺失的月份,可能是因为在某些月份没有销售,因此 group by 函数无法生成这些间隔的数据。

如何调整查询以使用默认零值来填补这些空白?否则直方图仍然不完整。

为了填补结果集中的空白并确保代表所有月份,即使某些月份没有销售,您也可以使用递归公用表表达式 (cte) 动态生成所选日历间隔的月份。

它生成涵盖所需时间范围的日期序列。然后,您可以将此日期序列与您的销售数据左连接,以将所有月份包含在结果集中。

with recursive daterange as (    select         date_format(date_sub(date_format(now(), '%y-%m-01'), interval 11 month), '%y-%m-01') as min_date,        date_format(now(), '%y-%m-01') as max_date    union all    select         date_format(date_add(min_date, interval 1 month), '%y-%m-01'),        max_date    from         daterange    where         date_add(min_date, interval 1 month) <= max_date)select     date_format(daterange.min_date, '%y-%m') as sales_month,    count(sales.sale_date) as countfrom     daterangeleft join     sales on date_format(daterange.min_date, '%y-%m') = date_format(sales.sale_date, '%y-%m')group by     sales_monthorder by     sales_month;

daterange cte(通用表表达式)递归地生成一系列月份,涵盖销售表中最小和最大销售日期之间的时间范围。

此查询根据销售表中的最小和最大销售日期动态生成所选日历间隔的月份,确保所有月份都出现在结果集中。

用代码填补空白

sql 解决方案对于开发人员来说可能不太舒服,而且需要更多的自定义可能会导致更喜欢基于代码的解决方案。

在这种情况下,您可以通过三个简单的步骤获得相同的结果:

用你感兴趣的时间间隔创建数组;获取group by查询结果;合并它们。

这是使用 laravel 和 carbon 库的代码片段:

$dates = [];// Create the array with the time interval of your interestsfor(    $day = now()->subDays(31);    $day->startOfDay()->lte(now());    $day->addDay()) {    $dates[] = [        'day' => $day->format('Y-m-d'),        'total' => 0,    ];}// Get the result from the GROUP BY query$sales = $product->sales()->select(DB::raw('DATE(sale_at) as day, CAST(SUM(qty) AS UNSIGNED) as total'))    ->where('sale_at', '>=', now()->subDays(31))    ->groupBy('day')    ->get();// Merge themreturn array_map(function ($date) use ($sales) {    foreach ($sales as $sale) {        if ($date['day'] === $sale['day']) {            return $sale;        }    }}, $dates);

如果您有兴趣阅读更多有关数据库的文章,您可以查看以下文章:

如何扩展 sql 数据库如何复制 mysql 表已解决 – 违反完整性约束使用 laravel 预加载每天节省 120 万次查询如何通过智能 sql 查询加速应用程序性能使您的应用程序可扩展,优化 orm 性能已解决 – 使用 laravel 队列和作业超出 mysql 锁等待超时

免费监控您的 php 应用程序

inspector 是一款专为软件开发人员设计的代码执行监控工具。您无需在云基础设施上安装任何内容,只需安装 laravel 软件包即可开始使用。

inspector 超级易于使用,并且需要零配置。

如果您正在寻找 http 监控、查询见解以及将警报和通知转发到您首选消息传递环境的功能,请免费尝试 inspector。 [注册您的帐户+(https://app.inspector.dev/register).

或在网站上了解更多:https://inspector.dev

使用 MySQL 创建直方图 – 教程

以上就是使用 MySQL 创建直方图 – 教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/55541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 21:13:07
下一篇 2025年11月9日 21:32:56

相关推荐

  • HTMLrev 上的免费 HTML 网站模板

    HTMLrev 是唯一的人工策划的库专门专注于免费 HTML 模板,适用于由来自世界各地慷慨的模板创建者制作的网站、登陆页面、投资组合、博客、电子商务和管理仪表板世界。 这个人就是我自己 Devluc,我已经工作了 1 年多来构建、改进和更新这个很棒的免费资源。我自己就是一名模板制作者,所以我知道如…

    2025年12月24日
    300
  • 如何使用 Laravel 框架轻松整合微信支付与支付宝支付?

    如何通过 laravel 框架整合微信支付与支付宝支付 在 laravel 开发中,为电商网站或应用程序整合支付网关至关重要。其中,微信支付和支付宝是中国最流行的支付平台。本文将介绍如何使用 laravel 框架封装这两大支付平台。 一个简单有效的方法是使用业内认可的 easywechat lara…

    2025年12月24日
    000
  • Laravel 框架中如何无缝集成微信支付和支付宝支付?

    laravel 框架中微信支付和支付宝支付的封装 如何将微信支付和支付宝支付无缝集成到 laravel 框架中? 建议解决方案 考虑使用 easywechat 的 laravel 版本。easywechat 是一个成熟、维护良好的库,由腾讯官方人员开发,专为处理微信相关功能而设计。其 laravel…

    2025年12月24日
    300
  • 如何在 Laravel 框架中轻松集成微信支付和支付宝支付?

    如何用 laravel 框架集成微信支付和支付宝支付 问题:如何在 laravel 框架中集成微信支付和支付宝支付? 回答: 建议使用 easywechat 的 laravel 版,easywechat 是一个由腾讯工程师开发的高质量微信开放平台 sdk,已被广泛地应用于许多 laravel 项目中…

    2025年12月24日
    000
  • 使用Laravel框架如何整合微信支付和支付宝支付?

    使用 Laravel 框架整合微信支付和支付宝支付 在使用 Laravel 框架开发项目时,整合支付网关是常见的需求。对于微信支付和支付宝支付,推荐采用以下方法: 使用第三方库:EasyWeChat 的 Laravel 版本 建议直接使用现有的 EasyWeChat 的 Laravel 版本。该库由…

    2025年12月24日
    000
  • 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中?

    如何简洁集成微信和支付宝支付到 Laravel 问题: 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中? 答案: 强烈推荐使用流行的 Laravel 包 EasyWeChat,它由腾讯开发者维护。多年来,它一直保持更新,提供了一个稳定可靠的解决方案。 集成步骤: 安装 Laravel …

    2025年12月24日
    100
  • 网络进化!

    Web 应用程序从静态网站到动态网页的演变是由对更具交互性、用户友好性和功能丰富的 Web 体验的需求推动的。以下是这种范式转变的概述: 1. 静态网站(1990 年代) 定义:静态网站由用 HTML 编写的固定内容组成。每个页面都是预先构建并存储在服务器上,并且向每个用户传递相同的内容。技术:HT…

    2025年12月24日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • CSS如何实现任意角度的扇形(代码示例)

    本篇文章给大家带来的内容是关于CSS如何实现任意角度的扇形(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 扇形制作原理,底部一个纯色原形,里面2个相同颜色的半圆,可以是白色,内部半圆按一定角度变化,就可以产生出扇形效果 扇形绘制 .shanxing{ position:…

    2025年12月24日
    000
  • html中怎么运行sql语句_html中运行sql语句方法【教程】

    必须通过后端服务执行SQL操作。一、PHP与MySQL交互:使用PHP脚本在服务器端连接数据库,执行查询并嵌入HTML输出,避免硬编码凭证。二、Ajax调用API:前端通过JavaScript向后端API发送请求,服务端执行SQL并返回JSON数据,前端动态渲染结果。三、SQLite与JavaScr…

    2025年12月23日
    000
  • html手机怎么运行_手机运行html方法【教程】

    1、使用手机浏览器可直接打开本地HTML文件,只需通过文件管理器点击文件并选择浏览器打开即可预览;2、借助Spck Editor等专用编辑器应用能实现实时编辑与预览,适合开发调试;3、对于含JavaScript或需服务器支持的动态内容,应安装KSWEB类应用搭建本地服务器,再通过http://loc…

    2025年12月23日
    000
  • html如何连接_连接HTML与数据库或API接口【接口】

    HTML无法直接连接数据库或调用API,需借助JavaScript fetch、PHP中转、Node.js后端或Python Flask等服务端技术实现动态数据交互。 如果您希望在网页中动态获取数据,HTML本身无法直接连接数据库或调用API接口,必须借助服务器端语言或JavaScript等客户端技…

    2025年12月23日
    000
  • HTML如何添加批注功能_评论系统实现方案【教程】

    可实现HTML文本批注功能的四种方案:一、基于HTML5自定义属性与JS的静态批注;二、遵循W3C标准的语义化批注;三、嵌入Utterances或Giscus等第三方评论系统;四、自建AJAX评论后端+前端组件。 如果您希望在HTML页面中为特定文本添加可交互的批注功能,或构建一个轻量级的评论系统,…

    2025年12月23日
    000
  • html怎么在本地服务器运行_本地服务器运html方法【指南】

    使用本地服务器运行HTML文件需通过HTTP协议,可选Python命令启动服务、Node.js的http-server、VS Code的Live Server插件或XAMPP等工具,确保AJAX等功能正常。 要在本地服务器运行HTML文件,不能直接双击打开,因为部分功能(如AJAX、API调用)需要…

    2025年12月23日
    200
  • Web页面中动态内容与页脚重叠的解决方案

    本教程旨在解决使用php `include`功能构建bootstrap网站时,页脚内容与主体内容重叠的问题。核心在于纠正html结构中的多余 “ 和 ` ` 标签,确保每个页面只包含一个完整的html文档结构,并将javascript脚本正确放置在 “ 结束标签之前,从而实现…

    2025年12月23日
    000
  • phpstudy怎么运行本地html_phpstudy运行本地html方法【教程】

    确保Apache或Nginx服务已启动;2. 将HTML文件放入WWW目录;3. 浏览器访问localhost即可运行页面。 在使用 PHPStudy 时,运行本地 HTML 文件非常简单。PHPStudy 是一个集成了 Apache/Nginx、PHP 和 MySQL 的集成环境工具,主要用于本地…

    2025年12月23日
    000
  • Laravel Blade模板中DIV元素样式定制指南:字体、间距与最佳实践

    本教程详细介绍了如何在laravel blade模板中为div元素应用自定义字体、调整大小和设置间距。我们将探讨常见的错误、正确的内联样式方法,并强调使用css类的最佳实践,同时指导如何正确集成自定义字体,以实现清晰、可维护的样式控制。 引言:理解Blade模板中的样式需求 在构建Web应用时,我们…

    2025年12月23日
    200
  • 如何正确构建HTML结构以确保Bootstrap页脚自动下沉

    本教程旨在解决使用php `include` 和 bootstrap 5 时页脚与内容重叠的问题。核心在于纠正不正确的html结构,避免重复的“和` `标签,合理放置css和javascript引用,并移除可能导致布局冲突的`vh-100`类,确保页脚能根据内容动态下沉。 在Web开发中…

    2025年12月23日
    000
  • HTML页面如何生成短链接_URL压缩转换方法【攻略】

    可借助第三方服务、API调用、Nginx反向代理、PHP脚本或GitHub Pages五种方式将HTML页面URL转为短链接:1.用bit.ly等平台手动缩短;2.调用Bitly API批量生成;3.配置Nginx rewrite规则重定向;4.部署PHP+MySQL实现动态跳转;5.利用GitHu…

    2025年12月23日
    000
  • 优化Web页面布局:确保Bootstrap页脚自动适应内容高度

    当使用php `include` 动态构建页面时,不正确的html结构(如重复的 “ 和 ` ` 标签)常导致页脚与主体内容重叠。本文将指导如何通过修正html文档结构,避免冗余标签,并确保javascript脚本正确放置,从而实现页脚自动向下移动,适应动态内容高度,提升页面布局的稳定性…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信