我的任务是受到动态屏蔽的要求。 与大多数动态屏蔽要求不同的是,生成的SQL必须使用HAVING子句而不是WHERE子句进行屏蔽。至少这是我学习的内容。
具体做法是: 必须满足几条规则,但我使用两条规则进行试点开发和研究。他们是:
理想情况下,我会显示数据行,但只会屏蔽敏感列中的值。但是,根据我目前的发现,我会接受过滤行。
环境
同样,有更多的规则,但让我们从那些开始。 如果我考虑这样一个简单的查询:(本帖末尾的样本数据)
select
Time_Wk, Category, Brand, sum( Value_Sales )
from
clientData
group by
Time_Wk, Category, Brand
我需要应用上面的掩码规则并更改SQL以包含一个HAVING子句,这将导致以下SQL
select
Time_Wk, Category, Brand, sum( Value_Sales )
from
clientData
group by
Time_Wk, Category, Brand
having
count( distinct Retailer ) > 2
and ( sum( Sensitive_Sales ) / sum( Value_Sales * 1.0 ) ) < .95
这当然没有考虑使用连接或已经使用HAVING子句的更复杂查询。宝贝步骤。
这是我到目前为止所考虑的以及我的发现:
提前感谢您查看此帖子以及您可能提供的任何信息。非常感谢。
示例数据,如果您真的对使用此场景感兴趣
DROP TABLE IF EXISTS clientData;
CREATE TABLE IF NOT EXISTS clientData(
Time_wk INTEGER NOT NULL
,Category VARCHAR(4)
,Brand VARCHAR(5)
,Retailer VARCHAR(8)
,Value_Sales INTEGER
,Senstivity_Flag INTEGER
,Sensitive_Sales INTEGER
,PRIMARY KEY(Time_wk,Category,Brand,Retailer)
);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Coke','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Coke','NonSens5',200,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Coke','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Coke','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Coke','NonSens6',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Pepsi','Sens1',25,1,25);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Pepsi','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (1,'Cola','Pepsi','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (2,'Cola','Coke','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (2,'Cola','Coke','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (2,'Cola','Coke','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (2,'Cola','Pepsi','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (2,'Cola','Pepsi','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (2,'Cola','Pepsi','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Coke','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Coke','Nonsens4',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Coke','Nonsens5',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Coke','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Coke','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Pepsi','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Pepsi','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (3,'Cola','Pepsi','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (4,'Cola','Coke','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (4,'Cola','Coke','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (4,'Cola','Coke','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (4,'Cola','Pepsi','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (4,'Cola','Pepsi','Sens1',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (4,'Cola','Pepsi','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (5,'Cola','Coke','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (5,'Cola','Coke','Sens1',0,1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (5,'Cola','Coke','Sens2',0,1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (5,'Cola','Pepsi','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (5,'Cola','Pepsi','Sens2',100,1,100);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (6,'Cola','Coke','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (6,'Cola','Pepsi','NonSens3',100,-1,0);
INSERT INTO clientData(Time_wk,Category,Brand,Retailer,Value_Sales,Senstivity_Flag,Sensitive_Sales) VALUES (6,'Cola','Pepsi','Sens2',100,1,100);