SQL 查询这两个表
SQL Query For These Two Tables
我有这两个 table:
人
Name Gender RegionID
Bob Male 1
Mary Female 2
Jane Female 3
Chris Male 1
Paul Male 2
Matt Male 2
Jenny Female 1
地区
ID Region
1 North
2 South
3 Central
我想以这样的 table 结束:
Region Male Female
North 2 1
South 2 1
Central 0 1
我首先尝试获取包含区域 ID 的结果 table,因此不需要加入:
select RegionID, Gender, count(Name) from Person group by RegionID
但是“性别”字段未定义。并且真的不知道从那里去哪里。
如所标记,我正在使用 alasql
JavaScript 库。
试着看看这个:
SELECT A.Region
, SUM(CASE WHEN Gender = 'Male' Then 1 else 0 end) Male
, SUM(CASE WHEN Gender = 'Female' Then 1 else 0 end) Female
FROM Region A
Inner Join Person B
On A.ID = B.RegionID
Group By A.Region
你可以使用这个
select region
,sum(case when b.Gender='Male' then 1 else 0 end) Male
,sum(case when b.Gender='Female' then 1 else 0 end) Female
from Region a
inner join Person b on a.[Id]=b.RegionID
group by a.[Id],a.Region
order by [id]
在 tsql 中,您可以进行数据透视,如果您有多个值进行数据透视,这可能会更容易:
Select * from
( select Region ,Gender
from Region a
inner join Person b on a.[Id]=b.RegionID ) p
pivot
( count(Gender)
for Gender
IN ([Male],[Female])
) pivottable
如果你添加第三性别,像这样的非二元性别
insert into Person values ('Kim','Nonbinary',3)
您可以轻松地扩展您的查询以说明这一点:
Select * from
( select Region ,Gender
from Region a
inner join Person b on a.[Id]=b.RegionID ) p
pivot
( count(Gender)
for Gender
IN ([Male],[Female],[Nonbinary])
) pivottable
order by a.[id]
对于在 alasql
中寻找最终解决方案的任何人,这就是我在本页的帮助下得出的结论:
var res = alasql("SELECT regionData.Title \
, SUM(CASE WHEN peopleData.Gender = 'Male' THEN 1 ELSE 0 END) AS Male \
, SUM(CASE WHEN peopleData.Gender = 'Female' THEN 1 ELSE 0 END) AS Female \
FROM ? regionData LEFT JOIN ? peopleData \
ON regionData.ID = peopleData.RegionID\
GROUP BY regionData.Title", [regionData, bensData]);
我有这两个 table:
人
Name Gender RegionID
Bob Male 1
Mary Female 2
Jane Female 3
Chris Male 1
Paul Male 2
Matt Male 2
Jenny Female 1
地区
ID Region
1 North
2 South
3 Central
我想以这样的 table 结束:
Region Male Female
North 2 1
South 2 1
Central 0 1
我首先尝试获取包含区域 ID 的结果 table,因此不需要加入:
select RegionID, Gender, count(Name) from Person group by RegionID
但是“性别”字段未定义。并且真的不知道从那里去哪里。
如所标记,我正在使用 alasql
JavaScript 库。
试着看看这个:
SELECT A.Region
, SUM(CASE WHEN Gender = 'Male' Then 1 else 0 end) Male
, SUM(CASE WHEN Gender = 'Female' Then 1 else 0 end) Female
FROM Region A
Inner Join Person B
On A.ID = B.RegionID
Group By A.Region
你可以使用这个
select region
,sum(case when b.Gender='Male' then 1 else 0 end) Male
,sum(case when b.Gender='Female' then 1 else 0 end) Female
from Region a
inner join Person b on a.[Id]=b.RegionID
group by a.[Id],a.Region
order by [id]
在 tsql 中,您可以进行数据透视,如果您有多个值进行数据透视,这可能会更容易:
Select * from
( select Region ,Gender
from Region a
inner join Person b on a.[Id]=b.RegionID ) p
pivot
( count(Gender)
for Gender
IN ([Male],[Female])
) pivottable
如果你添加第三性别,像这样的非二元性别
insert into Person values ('Kim','Nonbinary',3)
您可以轻松地扩展您的查询以说明这一点:
Select * from
( select Region ,Gender
from Region a
inner join Person b on a.[Id]=b.RegionID ) p
pivot
( count(Gender)
for Gender
IN ([Male],[Female],[Nonbinary])
) pivottable
order by a.[id]
对于在 alasql
中寻找最终解决方案的任何人,这就是我在本页的帮助下得出的结论:
var res = alasql("SELECT regionData.Title \
, SUM(CASE WHEN peopleData.Gender = 'Male' THEN 1 ELSE 0 END) AS Male \
, SUM(CASE WHEN peopleData.Gender = 'Female' THEN 1 ELSE 0 END) AS Female \
FROM ? regionData LEFT JOIN ? peopleData \
ON regionData.ID = peopleData.RegionID\
GROUP BY regionData.Title", [regionData, bensData]);