-3

我有这两张表:

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

我想最终得到一个这样的表:

Region  Male    Female
North   2       1
South   2       1
Central 0       1

我首先尝试获取带有区域 ID 的结果表,因此不需要加入:

select RegionID, Gender, count(Name) from Person group by RegionID

但是 Gender 字段又回来了未定义。而且真的不知道从那里去哪里。

正如所标记的,我正在使用alasqlJavaScript 库。

4

3 回答 3

1

试着看看这个:

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
于 2016-02-29T10:21:42.743 回答
1

你可以用这个

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]
于 2016-02-29T10:33:45.153 回答
1

对于在 中寻找最终解决方案的任何人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]);
于 2016-02-29T11:53:55.590 回答