通过计算列上的百分比来将记录插入到另一个表中的查询

SUBHAS PATIL

我有2个具有以下结构的Postgres表:

Table "public.tmp"
      Column       |          Type           | Collation | Nullable | Default 
-------------------+-------------------------+-----------+----------+---------
 MY_SL             | character varying(50)   |           |          | 
 Release           | character varying(50)   |           |          | 
 HOSTNAME          | character varying(50)   |           | not null | 
 UN NO.            | character varying(50)   |           |          | 
 STATUS            | character varying(50)   |           |          | 
 S_DATE            | character varying(50)   |           | not null | 

Table "public.mo"
      Column       |          Type           | Collation | Nullable |                 Default                 
-------------------+-------------------------+-----------+----------+-----------------------------------------
 id                | integer                 |           | not null | nextval('mo_id_seq'::regclass)
 HOSTNAME          | character varying(50)   |           | not null | 
 UN NO.            | character varying(50)   |           |          | 
 STATUS            | character varying(50)   |           |          | 
 S_DATE            | character varying(50)   |           | not null | 
 compliant_status  | character varying(50)   |           | not null |
 C_PERCENT         | character varying(50)   |           | not null |

可以说我在tmp表中有如下数据:

Table: tmp

 MY_SL | Release | HOSTNAME   |  UN NO.|  STATUS   |      S_DATE    
------------+-------------+-----------+----------------------+------------------
 2     | 1       | RhelTest   | 7:1:8  | COMPLIANT | 2020-08-26
 12    | 1       | RhelTest   | 7:1:9  | COMPLIANT | 2020-08-26
 22    | 2       | RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26
 4     | 1       | RhelTest   | 7:2:10 | NC        | 2020-08-26
 12    | 1       | RhelTest   | 7:1:9  | COMPLIANT | 2020-08-26
 22    | 2       | RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26
 12    | 1       | RhelTest   | 7:1:9  | NC        | 2020-08-26
 22    | 2       | RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26
 11    | 2       | RhelTest   | 7:2:11 | NC        | 2020-08-26
 1     | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26
 23    | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26
 1     | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26
 23    | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26
 1     | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26
 23    | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26
 333   | 3       | Demo2      | 7:2:11 | COMPLIANT | 2020-08-26
 333   | 3       | Demo2      | 7:2:11 | COMPLIANT | 2020-08-26
 333   | 3       | Demo2      | 7:2:11 | COMPLIANT | 2020-08-26
 333   | 3       | Demo2      | 7:2:11 | COMPLIANT | 2020-08-26
 333   | 3       | Demo3      | 7:2:11 | COMPLIANT | 2020-08-26
 333   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 333   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 333   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 333   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 432   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26 
 333   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 111   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 333   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 321   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 564   | 3       | Demo3      | 7:2:11 | NC        | 2020-08-26
 958   | 3       | Demo3      | 7:2:11 | COMPLIANT | 2020-08-26

我下面有一个脚本,该脚本根据以下条件将数据从public.tmp插入public.mo表:

  • 如果STATUS列具有特定HOSTNAME的混合值(COMPLIANT和NC),则Compliance_status为PARTIAL,
  • 如果所有值对于特定的HOSTNAME都是COMPLIANT,则Compliance_status是COMPLIANT,
  • 如果所有值对于一个特定的HOSTNAME均为NC,则Compliance_status为NON_COMPLIANT

insert into mo ("HOSTNAME","UN NO.","STATUS","S_DATE", compliant_status)
        select "HOSTNAME","UN NO.","STATUS","S_DATE",
         case
                when min_host_status <> max_host_status then 'PARTIAL'
                when min_host_status = 'NC' then 'NON_COMPLIANT'
                else min_host_status
         end
        from (
         select t.*,
                min("STATUS") over(partition by "HOSTNAME") min_host_status,
                max("STATUS") over(partition by "HOSTNAME") max_host_status
         from tmp_aix t
         where "STATUS" != 'NOT_APPLICABLE'
) t;

现在,我想根据以下条件显示Compliance_status:

  1. 如果没有。特定HOSTNAME的STATUS列中的COMPLIANT值的最大值大于80%,则Compliance_status为COMPLIANT。
  2. 如果没有。特定HOSTNAME的STATUS列中的COMPLIANT值的最大值小于80%,则Compliance_status为NON_COMPLIANT。

我期望基于上述数据的最终输出如下:

主机名:RhelTest,合规%:88.88%,兼容状态:合规

主机名:Demo1,符合%:0%,兼容状态:NON_COMPLIANT

主机名:Demo2,合规%:100%,兼容状态:合规

主机名:Demo3,合规%:16.67%,兼容状态:NON_COMPLIANT

最终预期表:

Table: public.mo

  HOSTNAME  |  UN NO.     |  STATUS   | S_DATE  | compliant_status  | C_PERCENT
------------+-------------+-----------+----------------------+------------------
 RhelTest   | 7:1:8  | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:1:9  | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:2:10 | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:1:9  | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:1:9  | NC        | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 RhelTest   | 7:2:11 | COMPLIANT | 2020-08-26   | COMPLIANT         | 88.88
 Demo1      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 0
 Demo1      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 0
 Demo1      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 0
 Demo1      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 0
 Demo1      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 0
 Demo1      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 0
 Demo2      | 7:2:11 | COMPLIANT | 2020-08-26   | COMPLIANT         | 100
 Demo2      | 7:2:11 | COMPLIANT | 2020-08-26   | COMPLIANT         | 100
 Demo2      | 7:2:11 | COMPLIANT | 2020-08-26   | COMPLIANT         | 100
 Demo2      | 7:2:11 | COMPLIANT | 2020-08-26   | COMPLIANT         | 100
 Demo3      | 7:2:11 | COMPLIANT | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | NC        | 2020-08-26   | NON_COMPLIANT     | 16.67
 Demo3      | 7:2:11 | COMPLIANT | 2020-08-26   | NON_COMPLIANT     | 16.67
专线小巴

如果我正确地跟随您,则可以使用窗口功能:

select m.*,
    100 * avg((compliant_status = 'COMPLIANT')::int) over(partition by hostname) c_percent
    case when avg((compliant_status = 'COMPLIANT')::int) over(partition by hostname) >= 0.8
        then 'COMPLIANT'
        else 'NON_COMPLIANT'
    end as final_compliant_status
from mo m

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

<div>在另一个<div>相同百分比但内部重叠的地方?

来自分类Dev

Mysql查询在多个条件和列上从一个表插入到另一个表

来自分类Dev

如果将记录插入表,则触发插入到另一个表

来自分类Dev

中间使用百分比值将div在另一个div中垂直对齐

来自分类Dev

UIStackView-希望有一个百分比来定义每个项目

来自分类Dev

计算查询中的百分比

来自分类Dev

通过另一个列值计算每个列组的百分位值-Pandas DataFrame

来自分类Dev

Python中是否有一种方法可以计算一个时间占另一个时间的百分比?

来自分类Dev

获取基于另一个列的分组值的百分比

来自分类Dev

将记录从一个表插入到另一个表,然后删除插入的记录

来自分类Dev

如何通过在python上的表中获取另外两行的百分比来制作新行

来自分类Dev

如何基于R中另一个变量的频率计算一个变量的百分比

来自分类Dev

PSQL查询根据条件将记录从一个表插入到另一个表

来自分类Dev

如何基于R中另一个相同的行值求和百分比?

来自分类Dev

MySQL查询可根据另一个表中的记录将记录插入表中

来自分类Dev

如何通过单击将数据插入到两个表中,而在另一个表中使用第一个查询ID

来自分类Dev

一个列出另一个的百分比

来自分类Dev

通过计算总和,频率和百分比来模拟骰子滚动

来自分类Dev

计算插入两个表中的值之间的百分比

来自分类Dev

Mysql查询在多个条件和列上从一个表插入到另一个表

来自分类Dev

如果将记录插入表,则触发插入到另一个表

来自分类Dev

当高度为百分比时,将div放在另一个div的中间

来自分类Dev

如何使对象占另一个对象的宽度的百分比

来自分类Dev

计算mysql表中的值的百分比,并将百分比值写入另一个表中

来自分类Dev

将目录的结构(包括子目录)复制到另一个位置并移动一定百分比的文件

来自分类Dev

查找表中存在于另一个表中的行的百分比?

来自分类Dev

Excel 数据透视表计数字段作为另一个计数字段的百分比

来自分类Dev

根据另一个 CTE 百分比从列表中提取最高百分比的 ID

来自分类Dev

如何使百分比出现在另一个输入栏中?

Related 相关文章

  1. 1

    <div>在另一个<div>相同百分比但内部重叠的地方?

  2. 2

    Mysql查询在多个条件和列上从一个表插入到另一个表

  3. 3

    如果将记录插入表,则触发插入到另一个表

  4. 4

    中间使用百分比值将div在另一个div中垂直对齐

  5. 5

    UIStackView-希望有一个百分比来定义每个项目

  6. 6

    计算查询中的百分比

  7. 7

    通过另一个列值计算每个列组的百分位值-Pandas DataFrame

  8. 8

    Python中是否有一种方法可以计算一个时间占另一个时间的百分比?

  9. 9

    获取基于另一个列的分组值的百分比

  10. 10

    将记录从一个表插入到另一个表,然后删除插入的记录

  11. 11

    如何通过在python上的表中获取另外两行的百分比来制作新行

  12. 12

    如何基于R中另一个变量的频率计算一个变量的百分比

  13. 13

    PSQL查询根据条件将记录从一个表插入到另一个表

  14. 14

    如何基于R中另一个相同的行值求和百分比?

  15. 15

    MySQL查询可根据另一个表中的记录将记录插入表中

  16. 16

    如何通过单击将数据插入到两个表中,而在另一个表中使用第一个查询ID

  17. 17

    一个列出另一个的百分比

  18. 18

    通过计算总和,频率和百分比来模拟骰子滚动

  19. 19

    计算插入两个表中的值之间的百分比

  20. 20

    Mysql查询在多个条件和列上从一个表插入到另一个表

  21. 21

    如果将记录插入表,则触发插入到另一个表

  22. 22

    当高度为百分比时,将div放在另一个div的中间

  23. 23

    如何使对象占另一个对象的宽度的百分比

  24. 24

    计算mysql表中的值的百分比,并将百分比值写入另一个表中

  25. 25

    将目录的结构(包括子目录)复制到另一个位置并移动一定百分比的文件

  26. 26

    查找表中存在于另一个表中的行的百分比?

  27. 27

    Excel 数据透视表计数字段作为另一个计数字段的百分比

  28. 28

    根据另一个 CTE 百分比从列表中提取最高百分比的 ID

  29. 29

    如何使百分比出现在另一个输入栏中?

热门标签

归档