MySQL 根据条件求和多个列值

2024-03-05

我有以下架构(两个表):

**APPS**

   | ID (bigint)  | USERID (Bigint) | USAGE_START_TIME (datetime)    | 
    ------------------------------------------------------------------
   |  1           |        12       |         2013-05-03 04:42:55    |
   |  2           |        12       |         2013-05-12 06:22:45    |
   |  3           |        12       |         2013-06-12 08:44:24    |
   |  4           |        12       |         2013-06-24 04:20:56    |
   |  5           |        13       |         2013-06-26 08:20:26    |
   |  6           |        13       |         2013-09-12 05:48:27    |


**USAGE** 

   | ID (bigint)  | APPID (bigint) |   DEVICEID (bigint)  | HIGH_COUNT (bigint) |  MEDIUM_COUNT (bigint)  |
    --------------------------------------------------------------------------------------------------------
   |  1           |        1       |                  2    |       400           |                   200   |
   |  2           |        1       |                  3    |       200           |                   100   |
   |  3           |        2       |                  3    |       350           |                    40   |
   |  4           |        3       |                  4    |         2           |                   400   |
   |  5           |        4       |                  2    |         4           |                    30   |
   |  6           |        5       |                  3    |        50           |                   300   |

解释:

所以,有两张表。 现在我想找到以下内容:

给定一个 USERID,获​​取 HIGH_COUNT 和 MEDIUM_COUNT 的总和。计数的同时 SUM 应注意: 如果在使用中,则使用相同的设备 超过一次,则具有最新信息的记录(基于 APPS.USAGE_START_TIME),在计算时应考虑 和。

For ex:

对于上面的模式,结果应该是(对于 userid=12):

   | HIGH_COUNT (bigint)  | MEDIUM_COUNT (Bigint) |
    -----------------------------------------------
   |                356   |                   470 |

SQL 小提琴:http://sqlfiddle.com/#!2/74ae0f http://sqlfiddle.com/#!2/74ae0f


如果用户使用多个APPS在一台设备上,此查询将使用APPS最高的行usage_start_time:

select  a.userid
,       sum(u.high_count)
,       sum(u.medium_count)
from    apps a
join    `usage` u
on      u.appid = a.id
join    (
        select  u.device_id
        ,       a.userid
        ,       max(a.usage_start_time) as max_start_time
        from    apps a
        join    `usage` u
        on      u.appid = a.id
        group by
                u.device_id
        ,       a.userid
        ) filter
on      filter.device_id = u.device_id
        and filter.userid = a.userid
        and filter.max_start_time = a.usage_start_time
group by
        a.userid

在您的数据集中,它将选择使用行5, 3, 4对于用户12.

查看它在 SQL Fiddle 中的工作情况。 http://sqlfiddle.com/#!9/29aad/9/0

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

MySQL 根据条件求和多个列值 的相关文章

随机推荐

  • 确定我正在使用的实体框架版本?

    我相信有两个版本1和2 版本 2 被称为实体框架 4 0 我如何知道应用程序中正在使用哪个版本 这是在我的 web config 中 这是否意味着我正在使用版本 2
  • TwinCAT 3.0 自动化接口无需 Visual Studio?

    我需要从 C 应用程序启动 关闭 TwinCAT 3 0 正如善意回答的如何从控制台 C 程序启动 关闭TwinCAT系统 https stackoverflow com questions 54077462 how to startup
  • 在 iOS 中将 CSV 上传(转换为电子表格)到 Google Drive?

    我已经生成 csv 文件来存储在本地目录路径中 我尝试将 csv 文件上传到谷歌驱动器 它工作正常 从 Google 云端硬盘打开 csv 文件 但电子表格中未显示预览 所以我想上传 csv 文件 将 csv 转换为电子表格 到谷歌驱动器
  • 扩展 EF DBContext

    我不确定我所问的是否是正确的方法 我有一个数据库优先模型 我想向其中添加某些常用方法 例如更新特定表的特定字段 我知道我可以通过使用适当的方法创建一个类来做到这一点 例如 public static class MyClass public
  • Eclipse 传入同步视图将传入的新文件显示为文件夹

    我希望可以在这里询问 Eclipse 中的奇怪行为 错误 当我将 Eclipse 同步视图与 Subclipse 结合使用时 我可以通过指向左侧的蓝色箭头很好地查看来自其他开发人员的所有传入文件 双击非常适合打开比较编辑器并查看所有更改 一
  • 如何在 C# 中将包含 HTML 的字符串渲染为图像?

    我正在开发一个为用户提供交互式反馈工具的网络应用程序 在此应用程序中 用户可以单击发送反馈按钮 该按钮会在当前网页上覆盖一个覆盖层 并允许他们拖动突出显示区域DIVs 强调某些领域 一旦他们提交反馈 整个页面的 HTML 就会通过 AJAX
  • 当生成正态分布的随机值时,定义范围的最有效方法是什么?

    仅供参考 随机 伪随机 A 当生成均匀随机数时 我可以指定一个范围 即 Math random Math random 10 5 generates numbers between 5 and 15 B 生成一组具有高斯式正态随机性版本的随
  • 从多个 CSV 文件中解析特定列/数据

    所以 最近我一直在使用 D3 js 解析 CSV 文件中的数据 在阅读 Scott Murray 的 交互式数据可视化 一本很棒的书 内容非常丰富 时 它解释了如何从 CSV 中的表中选择所有数据 解析CSV的代码如下所示 d3 text
  • 如何在 JavaScript 中访问 Grails 变量?

    我的 Grails 应用程序中有一个变量BootStrap groovy class BootStrap def init servletContext gt def testGrails 11 我想展示一个 JavaScriptalert
  • 使用 Maven 在 gitlab 中运行 (Docker) 测试容器

    我正在 gitlab ci cd 管道中工作 该管道使用 maven 和 docker 执行其所有命令 不包括部署 在本例中 我尝试运行集成测试 由 Maven 启动 它使用测试容器 用于 mysql 数据库 这些测试在本地运行时工作正常
  • 如何在 Vue 模板中的数组中使数据响应

  • 如何从 Java Web 应用程序将用户发推文到他/她的 Twitter 帐户

    你好 我想构建一个 java web 应用程序 我希望用户从我的 java 应用程序在他的帐户上发推文 现在 当我们考虑 twitter4J 时 它显示的代码正在使用我们自己在 twitter 开发门户上注册的应用程序 它不要求客户提供凭据
  • 使用命名导入在 Je​​st 测试中导入“常量”

    我有一个config and constants我的项目中的文件夹 位于src config test ts src constants index js分别 我已经设置了 Jest 来使用moduleNameMapper如下所示 这样我就
  • React 测试库不更新状态

    我的组件 import React from react const TestAsync gt const counter setCounter React useState 0 const delayCount gt setTimeout
  • 多个轴的单个图例[重复]

    这个问题在这里已经有答案了 我有以下示例代码 fig1 suptitle Test ax1 fig1 add subplot 221 ax1 plot x y1 color b label aVal ax2 ax1 twinx ax2 pl
  • Spring Security Kerberos 与基本的链接

    我有一个关于 Spring Security 的快速问题 我正在寻找一种解决方案 将安全性集成到我们的应用程序中 该应用程序提供 SSO 但也提供基本的 HTTP 我们系统的自动化部分之一只能支持基本身份验证 而我们却被困在其中 目前 我们
  • Android udp 多播与以太网

    大家好 我正在开发一个使用 udp 多播的项目 我有一台服务器通过以太网电缆发送多播 udp 数据包 我花了几周的时间阅读有关 android 上多播的所有帖子 但我仍然无法在我的 Asus Transformer Tablet 4 1 上
  • 如何在 Angular 中添加可重用的模式对话框?

    我是 Angular 新手并尝试实施这个解决方案 http adamalbrecht com 2013 12 12 creating a simple modal dialog directive in angular js 进入我的项目
  • 将 xml 响应映射到类?

    我不知道如何将某些 XML 表示为 C 类 有人对如何正确映射此 xml 有任何建议吗 下面是我的尝试
  • MySQL 根据条件求和多个列值

    我有以下架构 两个表 APPS ID bigint USERID Bigint USAGE START TIME datetime 1 12 2013 05 03 04 42 55 2 12 2013 05 12 06 22 45 3 12