0

私はアプリケーションを構築しています

SQLデータベースにStudentテーブルがあり、これは次の構造を持っています

(
Student_ID int,
FullName varchar(255),
FirstName varchar(255),
LastName varchar(255),
FatherName varchar(255),
Father_FirstName varchar(255),
Father_LastName varchar(255),
Date_of_Birth datetime,
Gender varchar(10),
Date_of_Registration datetime,
Regestration_Status varchar(10),
Degree_Status varchar(10),
Qualification varchar(15),
Campus varchar(15),
Batch int,
Degree varchar(10)
)

このテーブルに収集されたデータは、カラチ、イスラマバード、ペシャワール、カラチの 4 つの異なる都市からのものです。

ペシャワールから収集された学生データには Gender プロパティが設定されていないため、このテーブル全体で、ペシャワール出身の学生の [性別] 列には値が含まれていません。

私のスーパーバイザーは、関連付けルールを介してテーブルのこのパッチを埋めるように私に依頼しました。これは、ほとんどの学生の名前がテーブル全体で非常に似ており、「USMAN」などの特定の名前があり、全体で USMAN のような名前が 100 ある場合です。テーブルの出身都市に関係なく、60 USMAN 行の性別が MALE の場合、ペシャワールが都市で、学生の名前が Usman であるパッチ内のすべての行は、性別を男性に設定する必要があります。

問題が明確になったことを願っています。誰かが私を助けることができれば、いくつかのSQLクエリを介してこれを機能させようとしています。

4

1 に答える 1

0

これは、性別列を設定するための良いトリックです。まず、名前で要約することから始めます。

select FirstName, count(*), sum(case when gender = 'M' then 1 else 0 end) as NumMales,
       avg(case when gender = 'M' then 1.0 else 0.0 end) as MalePercent,
       (case when avg(case when gender = 'M' then 1.0 else 0.0 end) > 0.5 then 'M'
             else 'F'
        end) as ImputedGender
from Students s
where gender is not null
group by FirstName

次に、結果に目を通し、カットオフを設定する必要があります。特定の名前を持つ 1 人の男性または女性の学生は、その名前が性別を割り当てていることを納得させません。したがって、少なくとも 5 つの例と、1 つの性別で 80% が必要だとします。

select FirstName, count(*), sum(case when gender = 'M' then 1 else 0 end) as NumMales,
       avg(case when gender = 'M' then 1.0 else 0.0 end) as MalePercent,
       (case when avg(case when gender = 'M' then 1.0 else 0.0 end) > 0.5 then 'M'
             else 'F'
        end) as ImputedGender
from Students s
where gender is not null
group by FirstName
having count(*) >= 5 and
       avg(case when gender = 'M' then 1.0 else 0.0 end) not between 0.2 and 0.8

次のステップは、帰属性別を行に割り当てることです。これは、SQL の種類によって異なる場合があります。これは次のようなものです:

update Students
    set gender = ImputedGender
    from (<the above query>) ig
    where ig.Firstname = Students.FirstName and
          Students.city <> 'Peshawar' and
          Students.gender is null
于 2012-12-18T16:35:31.477 に答える