Select 一个性别主导的群体来自一个群体,其中一个性别群体的平均工资较低但工作点数较高

Select a gender dominated group from a pupulation where one gendergroup has lower average salary but higher jobPoints

我有两个表:
Table 一个:列 – GroupName 和 GroupJobPoints。
Table two 此处有感兴趣的列 – GroupName (fk_key) 引用 Table One,Person_ID,性别,薪水。

我想从我的数据库中查看:
1) 获取由一种性别主导的 GroupName(=> 一种性别的 60%)——继续这个组。
2)比较这个性别主导的群体GroupJobPoints。如果 GroupJobPoints 的差异在 4% 范围内 - 将男性组与女性组进行比较。
3) 将男性组的平均工资与女性组的平均工资在这个 4% 范围内进行比较。如果男性组的组平均工资高于女性组 - 那么我想知道并显示出来。

示例: 1) 第 1 组有 250 名男性和 50 名女性。第 2 组有 20 名男性和 300 名女性。两组都以性别为主,继续 2) 第 1 组有 2 000 分,第 2 组有 1 950 分。差异在 4% 范围内,一组以男性为主,一组以女性为主。继续。 3) 第 1 组的平均工资 = 25 000,第 2 组的平均工资 = 22 000。我想要这个显示,因为男性组的工作点较低但平均工资较高,这对我来说有点奇怪:-)。

如何通过 SQL 代码获得此信息。我使用 MS SQL-server Express 2012。我假设会有一些连接和 where 子句等等,代码将在某些方面逐步进行,但我不知道我将如何做这个。谁能帮我解决这个问题,我相信我会从中学到很多东西。

with t1 as (
    select
        one.GroupName,
        one.GroupJobPoints,
        (select cast(count(1) as float) from TableTwo where GroupName=one.GroupName and Gender='M')/(select cast(count(1) as float) from TableTwo where GroupName=one.GroupName) FracMale,
        (select avg(Salary) from TableTwo where GroupName=one.GroupName) AvgSalary
    from
        TableOne one
)
select
    m.GroupName,
    m.GroupJobPoints,
    m.AvgSalary,
    m.FracMale,
    f.GroupName,
    f.GroupJobPoints,
    f.AvgSalary,
    f.FracMale
from
    t1 m
    cross join t1 f
where
    m.FracMale>=0.60
    and f.FracMale<=0.40
    and abs(f.GroupJobPoints-m.GroupJobPoints)/m.GroupJobPoints<=0.04
    and m.AvgSalary>f.AvgSalary
;

测试数据:

if object_id('TableTwo') is not null drop table TableTwo;
if object_id('TableOne') is not null drop table TableOne;
create table TableOne (GroupName varchar(32), GroupJobPoints float, primary key (GroupName) );
create table TableTwo (GroupName varchar(32) references TableOne(GroupName), Person_ID int, Gender char(1), Salary float, primary key (Person_ID) );

insert into TableOne (GroupName, GroupJobPoints ) values ('1',2000);
insert into TableOne (GroupName, GroupJobPoints ) values ('2',1950);

declare @PersonID int = 0;
declare @i int;

set @i = 0; while (@i < 250) begin set @PersonID=@PersonID+1; insert into TableTwo (GroupName, Person_ID, Gender, Salary ) values ('1',@PersonID,'M',25000); set @i=@i+1; end;
set @i = 0; while (@i < 50) begin set @PersonID=@PersonID+1; insert into TableTwo (GroupName, Person_ID, Gender, Salary ) values ('1',@PersonID,'F',25000); set @i=@i+1; end;

set @i = 0; while (@i < 20) begin set @PersonID=@PersonID+1; insert into TableTwo (GroupName, Person_ID, Gender, Salary ) values ('2',@PersonID,'M',22000); set @i=@i+1; end;
set @i = 0; while (@i < 300) begin set @PersonID=@PersonID+1; insert into TableTwo (GroupName, Person_ID, Gender, Salary ) values ('2',@PersonID,'F',22000); set @i=@i+1; end;

来自 运行 以上所有内容的输出: