【问题标题】:SQL - Select in SelectSQL - 在选择中选择
【发布时间】:2020-09-28 15:04:39
【问题描述】:

我有以下工作查询,我从中创建了一个堆叠列图。

我现在希望能够筛选出总 [plugin ID] 计数最高的前 10 个 [Prod_Model]。

我尝试为每个产品创建一个额外的列总和 [插件 ID] (vulCnt),而不考虑 [风险]。

我在SELECT 中使用INNER JOINSELECT 的努力失败了。

我的工作查询:

select t.Prod_Model, 
    count(t.[Plugin ID]) as vulCnt, 
    (case t.Risk
        when 'Critical' then 1
        when 'High' then 2
        when 'Medium' then 3
        when 'Low' then 4
        Else 5
    End) As Rsk_Levl,
    t.Risk
from ************ t
where t.prod_model <>''
group by t.Prod_Model, t.Risk
order by t.Prod_Model

结果是 -

|Prod_Model|vulCnt| Risk_Level| Risk    |
|procut 1  | 4    |    1      | Critical|
|procut 1  | 2    |    1      | High    |
|procut 1  | 6    |    1      | Medium  |
|procut 1  | 1    |    1      | Low     |
|procut 2  | 4    |    1      | Critical|
|procut 2  | 2    |    1      | High    |
|procut 2  | 6    |    1      | Medium  |
|procut 2  | 1    |    1      | Low     |

现在我需要顶部##。

我们将不胜感激。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 不明白。 “您正在使用的数据库”是什么意思?
  • 可能您正在使用 MySql,因此您将始终获得 rsk_level 中的第一个元素。
  • @Amos: 你确定你使用的是 Sql Server 吗?

标签: sql sql-server tsql count window-functions


【解决方案1】:

我认为您需要一个窗口总和来生成附加列。然后,您可以使用此信息进行排名和限制:

select *
from (
    select 
        Prod_Model, 
        count([Plugin ID]) as vulCnt, 
        (case Risk
            when 'Critical' then 1
            when 'High' then 2
            when 'Medium' then 3
            when 'Low' then 4
            Else 5
        End) As Rsk_Levl,
        Risk,
        dense_rank() over(order by cnt desc) rn
    from (
        select t.*, count(*) over(partition by Prod_Model) cnt 
        from mytable t
        where prod_model <> ''
    ) t
    group by Prod_Model, Risk
) t
where rn <= 10
order by rn

【讨论】:

  • 大家好,GMB,非常感谢您的回复。示例表如下所示: |Prod_Model |插件ID |风险 | |Prod-1 |1234 |高 | |Prod-1 |1236 |高 | |Prod-1 |1212 |高 | |Prod-1 |1288 |关键 | |Prod-1 |3411 |关键 | |Prod-1 |3214 |低 | |产品 1 |4444 |中 | |Prod-1 |6567 |低 | |产品-2 |等等……也不是下一条评论
  • 在查询中,我创建了一个风险索引,因为我希望将风险从关键到低排序,而不是按字母顺序将低放在中。此时,我创建了一个堆叠条形图。到目前为止一切正常。现在我希望能够选择总风险最高的 Prod_Models-Count。问题 - 查询和结果图在 Reporting Services 中。 top## 将是一个过滤器,它需要在单个查询中。请注意本讨论开始时的原始查询。谢谢大家,阿莫斯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2021-07-23
  • 2019-04-04
  • 1970-01-01
相关资源
最近更新 更多