Mysql 查询具有多个子查询,并按不同条件进行分组

标签 mysql sql subquery

嗨,我是一名 PHP 开发人员,不擅长 MySQL 中等复杂的查询让我头疼。 下表是漏洞

+-----------------------------------------------------------------------------------------------+ 
| id | webisite_id | low_count| high_count | medium_count | date_time           |   vul_date    |
+-----------------------------------------------------------------------------------------------+
| 20 | 6           | 1        | 1          | 1            | 2018-07-04 09:14:04 | 2018-02-01    |
| 19 | 6           | 30       | 30         | 30           | 2018-07-04 09:13:38 | 2018-01-30    |   
| 18 | 6           | 1        | 1          | 1            | 2018-07-04 09:13:16 | 2018-01-01    |
+-----------------------------------------------------------------------------------------------+  

此表代表数据库中每个网站的低、中、高漏洞计数。我们可以为每个网站输入尽可能多的条目。但网站的唯一相关条目是每个月的最新条目(基于 vul_date)。

这里我需要帮助,我想要查询获取过去 1 年每个月的每个网站的低、高、中计数总和,例如,如果 -> id 1 的网站有 1, 2、6 月和 3 个低、高、中漏洞数量 -> id 2 的结果分别为 7、8、9,结果应该是 6 月 8 日、10 日、12 日。就像过去 1 年的每个月结果一样,应该得到。如果没有条目,则应为 0。

请注意,条目应为 vul_date 的最大值,如果网站在同一 vul_date 上有多个条目,请获取最新的 date_time条目。

我尝试尽可能简单地写问题。希望这个问题能被理解。 请帮我解决这个问题

提前致谢。

最佳答案

我认为下面的查询适合您。

SELECT 
    SUM(low_count),
    SUM(medium_count),
    SUM(high_count),
    MONTH(vul_date)
FROM
    (SELECT 
        low_count, medium_count, high_count, vul_date, date_time
    FROM
        test
    WHERE
        (website_id , vul_date) IN (SELECT website_id, MAX(vul_date)
            FROM test GROUP BY website_id , MONTH(vul_date))) t
WHERE
    date_time IN (SELECT MAX(date_time) FROM test GROUP BY website_id , vul_date)
GROUP BY MONTH(vul_date);

它的作用是,首先找到每个网站 ID 的最新条目月份,即您的最大 vul_date。

SELECT website_id, MAX(vul_date)
            FROM test GROUP BY website_id , MONTH(vul_date)

如果 vul_date 有多个条目,它会使用 date_time 从它们中选择最大值。最后,按月分组后,它将所有网站日期相加。

您可以更改上述查询,以获取没有任何网站条目的月份的 0 值。

关于Mysql 查询具有多个子查询,并按不同条件进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51183758/

相关文章:

php - 如何使用类继承表获取自定义字段的结果计数?

时间:2019-03-17 标签:c#语言: Error while trying to save parameters to MySql DB using C#

php - 从html表格单元格分配php变量值

MySQL INNER JOIN 与 SubQuery(非常详细)

php - 使用 MySQL,不选择存在于不同表中的用户的最佳方法是什么?

mysql - 使用 MySQL 一对多关系

Mysql 与 union 和 in 子句错误

MYSQL:如何获取按周记录的小时数

sql - 限制从 oracle 和 postgres 中的查询返回的行数

sql - SQL 中具有多个 group by 子句的 SUM 和 MAX 函数会导致问题