You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何基于漏洞数量与严重级别计算最低风险分并查询最安全团队

实现思路

  • 第一步:先按团队(address字段)分组,分别统计每个团队的高危(critical)、中危(medium)、低危(low)漏洞的数量
  • 第二步:排序优先级按需求设置:
    • 第一优先级:满足critical = 0 AND medium = 0的团队排在最前
    • 第二优先级:中危漏洞数量升序,越少越靠前
    • 第三优先级:低危漏洞数量升序,越少越靠前
    • 兜底优先级:高危漏洞数量升序,覆盖剩余场景的排序逻辑
  • 额外说明:你之前写的SQL存在语法错误,WHERE子句必须放在GROUP BY前面才能生效

可直接运行的MySQL语句

兼容所有主流MySQL版本的写法:

SELECT 
  address,
  SUM(CASE WHEN severity = 'critical' THEN 1 ELSE 0 END) AS critical_cnt,
  SUM(CASE WHEN severity = 'medium' THEN 1 ELSE 0 END) AS medium_cnt,
  SUM(CASE WHEN severity = 'low' THEN 1 ELSE 0 END) AS low_cnt
FROM scanner
WHERE admin = "xxx" -- 自定义过滤条件放在此处
GROUP BY address
ORDER BY
  -- 第一排序规则:0高危0中危的团队优先展示
  (critical_cnt = 0 AND medium_cnt = 0) DESC,
  -- 第二排序规则:中危漏洞越少越靠前
  medium_cnt ASC,
  -- 第三排序规则:低危漏洞越少越靠前
  low_cnt ASC,
  -- 兜底排序:高危漏洞越少越靠前
  critical_cnt ASC
LIMIT 1000;

如果使用MySQL 8.0及以上版本,可使用更简洁的COUNT_IF函数实现统计:

SELECT 
  address,
  COUNT_IF(severity = 'critical') AS critical_cnt,
  COUNT_IF(severity = 'medium') AS medium_cnt,
  COUNT_IF(severity = 'low') AS low_cnt
FROM scanner
WHERE admin = "xxx"
GROUP BY address
ORDER BY
  (critical_cnt = 0 AND medium_cnt = 0) DESC,
  medium_cnt ASC,
  low_cnt ASC,
  critical_cnt ASC
LIMIT 1000;

内容的提问来源于stack exchange,提问作者enkiki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:07