MySQL选择总和大于阈值的记录

2023-12-27

我需要使用单个查询(无存储过程)根据 MySQL 数据库表中列出的文件大小选择记录。记录集应包含文件大小总和等于或超过特定阈值(如果需要)的所有记录。 (例如,阈值 = 30,结果返回 3 条记录,文件大小等于 10、10、20 或 10、10、10 或 1 条记录,文件大小为 32)

table

+----+---------+-----------+
| id | user_id | fileSize  |
+----+---------+-----------+
|  1 |       1 |      9319 |
|  2 |       1 |     51683 |
|  3 |       1 |     19776 |
|  4 |       1 |    395890 |
|  5 |       1 |      7132 |
|  6 |       1 |     97656 |
|  7 |       1 |      9798 |
|  9 |       1 |     16096 |
| 10 |       1 |    113910 |
| 11 |       1 |    160037 |
+----+---------+-----------+

在研究并尝试了多种不同的解决方案之后,我提出的最佳查询如下所示:

SELECT f1.user_id, f1.id AS file_id, f1.fileSize, SUM(f2.fileSize) AS totalSum
FROM files AS f1 
INNER JOIN files AS f2 ON f1.id >= f2.id 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING totalSum <= 350000;

结果示例

+---------+---------+-----------+----------+
| user_id | file_id |  fileSize | totalSum |
+---------+---------+-----------+----------+
|       1 |       1 |      9319 |     9319 |
|       1 |       2 |     51683 |    61002 |
|       1 |       3 |     19776 |    80778 |
+---------+---------+-----------+----------+

期望的结果

+---------+---------+-----------+----------+
| user_id | file_id |  fileSize | totalSum |
+---------+---------+-----------+----------+
|       1 |       1 |      9319 |     9319 |
|       1 |       2 |     51683 |    61002 |
|       1 |       3 |     19776 |    80778 |
|       1 |       4 |    395890 |   476668 |
+---------+---------+-----------+----------+

Or

+---------+---------+-----------+----------+
| user_id | file_id |  fileSize | totalSum |
+---------+---------+-----------+----------+
|       1 |       3 |    395890 |   395890 |
+---------+---------+-----------+----------+

上面的查询不起作用的是,永远不会满足阈值,因为它基于 HAVING 小于阈值(大于仅返回远高于阈值的大量记录)。另外,如果集合中存在文件大小超过阈值的记录,查询结果有时会返回空。理想的结果将满足或稍微超过阈值,并且如果单个文件大小匹配或超过阈值,则可能包含许多记录或单个记录。

任何帮助,将不胜感激。我想这是五年来我第一次在网上发布问题。说实话,在这个问题上已经坚持了一个星期了。 〜谢谢


这似乎适合 UNION 结果集。因此,您必须获得 2 个查询(每个“条件”一个)并使用 union 连接它们的结果。

第一个查询将变为:

SELECT f1.user_id, f1.id AS file_id, SUM(f1.fileSize) AS totalSum
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING totalSum <= 350000;

现在您需要选择尺寸是否太大的查询:

SELECT f1.user_id, f1.id AS file_id, MAX(f1.fileSize) AS max
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING max >= 350000;

接下来,您希望将它们合并到一个查询中。由于两者具有相同的字段,您可以简单地“联合”结果

SELECT f1.user_id, f1.id AS file_id, SUM(f1.fileSize) AS totalSum
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING totalSum <= 350000
UNION
SELECT f1.user_id, f1.id AS file_id, MAX(f1.fileSize) AS max
FROM files AS f1 
WHERE f1.user_id = 1
GROUP BY f1.id 
HAVING max >= 350000;

PS:您将“ON f1.id >= f2.id”作为加入条件,不知道为什么 > 会非常具体情况:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL选择总和大于阈值的记录 的相关文章

随机推荐

  • SXSSFWorkbook.write to FileOutputStream 写入大文件

    我正在尝试使用 SXSSFWorkbook 从头开始 编写 Excel 电子表格 wb SXSSFWorkbook 500 wb isCompressTempFiles true sh streamingWorkbook createShe
  • 输入字段内的按钮 Sencha Touch 2.0

    What I try to achieve is something alike this Only then in a Sencha Touch application I have achieved an input field wit
  • 是否可以使用网页中的 SVG 元素来确定 url(#id) 属性的范围?

    在 SVG 中 您可以使用 URL 引用 例如url id 指向网页上的其他 SVG 元素 例如
  • 使用Java解析从wireshark文件中获取的pcap

    我正在努力使用 JAVA 转换从wireshark 获取的 PCAP 文件 而不使用本机或现成的库 我直接将字节转换为字符串只是为了检查其中有意义的部分 然后我尝试将其从十六进制转换为字符串 这没有意义 有java库jNetPcap htt
  • iOS 忽略 enqueueSampleBuffer 因为状态失败

    当我从这里重新启动应用程序时 https github com zweigraf face landmarking ios https github com zweigraf face landmarking ios相机中的图片未出现并且打
  • 命令行解析器缺少子命令和分组?

    我知道这个问题在我寻找答案时已经在这里和其他地方被问过很多次了 然而 它仍然让我困惑为什么命令行解析器库不提供这种常见的使用场景 其中我有一组子命令 每个子命令都有自己的一组必需和可选参数 类似的构造可以在 git svn 中找到 尽管在他
  • 如何在同一个数据库中启动多个应用程序?

    我必须在本地 管理员和客户端 中使用流星应用程序 应用程序运行在不同的端口上3000 and 3003 我想使用两个应用程序应该使用相同的数据库 export MONGO URL mobgodb 127 0 0 1 3001 meteor会
  • 与mysql的累计和

    我有以下查询 set cumulativeSum 0 select cumulativeSum cumulativeSum count distinct ce URL ce IP as uniqueClicks cast ce dt as
  • 使用NextJS Link,如何在客户端传递对象?

    我正在使用一个 Link 组件 并且想要将 JavaScript 对象传递到我要链接到的新页面 看来我可以传递基元 但不能传递对象 也就是说 我想做下面这样的事情 但我得到一个与 sessionData 关联的空字符串 session id
  • 将 div 翻译为里程表

    我一直在尝试使用 React 和 vanilla css 创建一个类似里程表的动画 到目前为止 它正在工作 当数字增加时 translationY向上就像实际的里程表一样 我目前的问题是 当它从 9 变为 0 时 translationY发
  • 编译器警告范围内没有原型定义的函数?

    问题受到评论线程的启发这个答案 https stackoverflow com questions 50399128 functions in c headers 50399252 50399252 众所周知 从 C99 开始 调用未声明的
  • 给定两个时间戳,如何返回“业务分钟”的增量

    为此寻找一个干净的函数 最好是在 Pandas Numpy 中 我目前正在使用 Pandas 的 CustomBusinessHour 和 TimeDelta 函数构建一些混乱的东西 但我认为必须有更好的方法 如果 Pandas 有 Cus
  • Spark中使用Hive数据库

    我是 Spark 新手 尝试使用 HortonWorks Sandbox 在 tpcds 基准表上运行一些查询 http www tpc org tpcds http www tpc org tpcds 在沙箱上通过 shell 或 hiv
  • 为什么 ASP.NET Core 中的线程 ID 会发生变化?

    我使用 Thread 来存储区域设置并将其传递到各层 在我的中间件中 我在当前线程中设置选定的区域设置 如下所示 Thread SetData Thread GetNamedDataSlot SelectedLocale selectedL
  • 在 SearchView 中应用词干提取以从 Firebase 数据库获取数据

    我需要使用以下命令从 Firebase 数据库中获取用户列表SeachView或搜索对话框 我认为词干将最适合我的应用程序 不要求代码 但请告诉我它的算法 为了实现你想要的 你需要执行一个如下所示的查询 DatabaseReference
  • 菱形符号在 UML 类图中表示什么?

    考虑下面两个图 顶部的右端包含一个普通箭头 底部的一个左端包含一个带菱形的箭头 右端包含一个普通箭头 这很棒的书 GoF https rads stackoverflow com amzn click com 0201634988具有这两种
  • 在指定字符后使用正则表达式匹配序列

    初始字符串是 图片 salmon v5 09 14 2011 jpg 我想捕获文本 salmon v5 09 14 2011 jpg 并使用GSkinner 的正则表达式工具 http gskinner com RegExr 我能得到的最接
  • iPhone SDK:UIWebView 阻止图像加载/下载

    如何在 Xcode 中使用 UIWebView 以便在加载页面时不会下载图像 以加快页面加载速度 UIWebView是 WebKit 完整版的一个苍白 可怜的小影子WebView 这很容易 webView shouldStartLoadWi
  • Ruby 中的迄今为止的字符串

    我有很多类似 Mar 31 1999 的字符串值 有没有一种简单的方法可以将此字符串格式转换为 Ruby Date 您可以使用Date parse方法 gt Date parse Mar 31 1999 gt Wed 31 Mar 1999
  • MySQL选择总和大于阈值的记录

    我需要使用单个查询 无存储过程 根据 MySQL 数据库表中列出的文件大小选择记录 记录集应包含文件大小总和等于或超过特定阈值 如果需要 的所有记录 例如 阈值 30 结果返回 3 条记录 文件大小等于 10 10 20 或 10 10 1