mysql - 在 SQL 查询中分组

标签 mysql sql

<分区>

我有三个表,架构如下:

请检查sqlfiddle:http://sqlfiddle.com/#!2/55fc2

表:应用

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

表:主机

| ID (bigint) | APPID (Bigint)|         DEVICE_ID (Bigint)  | 
-------------------------------------------------------------
|  1          |        1      |                           1 | 
|  2          |        2      |                           1 |
|  3          |        1      |                           1 |    
|  4          |        3      |                           3 |       
|  5          |        1      |                           4 |      
|  6          |        2      |                           3 |

表:用法

| ID (bigint) | APPID (Bigint)|             HOSTID (Bigint) |   Factor (varchar)    |  
-------------------------------------------------------------------------------------
|  1          |        1      |                           1 |               Low     | 
|  2          |        1      |                           3 |               High    | 
|  3          |        2      |                           2 |               Low     | 
|  4          |        3      |                           4 |               Medium  | 
|  5          |        1      |                           5 |               Low     | 
|  6          |        2      |                           2 |               Medium  | 

现在,如果 put 是 userid,我想获取过去 6 个月每个“因素”月份的每个月(所有应用程序)表格行的行数。。 p>

如果 DEVICE_ID 在一个月内出现不止一次(基于 START_TIME,基于加入应用程序和主机),计算计数时仅考虑最新行的使用情况(基于应用程序、主机和使用情况的组合)。

上述示例查询的示例输出应为:(对于输入用户 id=13)

| MONTH       | USAGE_COUNT   |               FACTOR        | 
-------------------------------------------------------------
|  5          |        0      |                 High        | 
|  6          |        0      |                 High        | 
|  7          |        0      |                 High        | 
|  8          |        0      |                 High        |       
|  9          |        0      |                 High        |       
|  10         |        0      |                 High        | 
|  5          |        2      |                 Low         | 
|  6          |        0      |                 Low         | 
|  7          |        0      |                 Low         | 
|  8          |        0      |                 Low         |       
|  9          |        0      |                 Low         |       
|  10         |        0      |                 Low         |
|  5          |        1      |                 Medium      | 
|  6          |        1      |                 Medium      | 
|  7          |        0      |                 Medium      | 
|  8          |        0      |                 Medium      |       
|  9          |        0      |                 Medium      |       
|  10         |        0      |                 Medium      |

这是如何计算的?

  1. 2013 年 5 月 (05-2013),表 Apps 中有两个 App
  2. 在表 Hosts 中,这些应用与 device_id 的 1,1,1,4,3 相关联
  3. 本月 (05-2013) 对于 device_id=1,start_time 的最新值为:2013-05-12 06:22:45(来自表 hosts、apps),因此在表 Usage 中,查找组合appid=2&hostid=2 其中有两行,其中一行的因子为 Low,另一行为 Medium,
  4. 本月 (05-2013) 对于 device_id=4,按照相同的程序我们得到一个条目,即 0 Low
  5. 同样计算所有值。

要通过查询获取最近 6 个月的信息,我尝试使用以下方法获取它:

SELECT MONTH(DATE_ADD(NOW(), INTERVAL aInt MONTH)) AS aMonth
    FROM
    (
        SELECT 0 AS aInt UNION SELECT -1 UNION SELECT -2 UNION SELECT -3 UNION SELECT -4 UNION SELECT -5
    ) 

最佳答案

你需要了解GROUP BY的用法。那就是你要找的。您可以将结果分组到独立的组中,并对这些组独立使用计数和聚合函数。这是一个basic tutorial .

关于mysql - 在 SQL 查询中分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19232407/

相关文章:

sql - SSIS 将百分比转换为小数

php - 需要查询或交易将数据导出为设定格式

mysql - SQL仅选择列上具有最大值的行

mysql - 如何在不使用子查询的情况下使用 where 条件选择不同的记录

mysql - 如何使用 Spring Data JPA 和 MySQL 修复 Spring Boot 中的此错误

mysql创建表时语法错误

java - Spring Boot 和 PostgreSQL 中文件 data.sql 中错误的 SQL 语句语法

mysql - 如何将我的托管 mysql 数据库导入到我的本地主机数据库?

php - cp1250_general_ci 转 UTF-8 帮助

PHP/MySQL 如何在博客文章中重复使用 ID,而不是每次都使用 +1