gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:22:31 25 4
gpt4 key购买 nike

嗨,我是一名 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com