[英]SQL - Grouping and counting character in two columns
我有这张桌子:
|---------------------|------------------|------------------|
| NAME | GENDER | JOB |
|---------------------|------------------|------------------|
| John | Male | Accountant |
|---------------------|------------------|------------------|
| Jane | Female | Accountant |
|---------------------|------------------|------------------|
| Stephen | Male | Sales |
|---------------------|------------------|------------------|
| James | Male | Accountant |
|---------------------|------------------|------------------|
| Hanna | Female | Sales |
|---------------------|------------------|------------------|
| Joe | Male | Sales |
|---------------------|------------------|------------------|
| Diana | Female | Sales |
|---------------------|------------------|------------------|
...我想获得一张这样的表:
|---------------------|------------------|------------------|
| JOB | MALE | FEMALE |
|---------------------|------------------|------------------|
| Accountant | 2 | 1 |
|---------------------|------------------|------------------|
| Sales | 2 | 2 |
|---------------------|------------------|------------------|
所以我尝试了 group by,但我正在寻找更短更简单的查询
您正在寻找条件聚合:
select job,
sum(case when gender = 'Male' then 1 else 0 end) as num_males,
sum(case when gender = 'Female' then 1 else 0 end) as num_females
from t
group by job;
您可以为此使用PIVOT
:
DECLARE @data as Table
(
Name varchar(50) not null,
Gender varchar(10) not null,
Job varchar(10) not null
)
INSERT INTO @data (Name, Gender, Job)
VALUES ('John','Male','Accountant'),
('Jane','Female','Accountant'),
('Stephen','Male','Sales'),
('James','Male','Accountant'),
('Hanna','Female','Sales'),
('Joe','Male','Sales'),
('Diana','Female','Sales')
用你的表引用替换@data
SELECT Job, Male = SUM(Male), Female = SUM(Female)
FROM @data
PIVOT
(
SUM ( Gender ) FOR
Gender IN ( Male, Female )
) as pvtData
GROUP BY Job
你还没有标记你的数据库,但如果它是MySQL
,这将是“最短的”。 话虽如此,我建议使用显式 case 语句,而不是依靠语法怪癖来处理条件。
select job
,sum(gender = 'Male') num_males
,sum(gender = 'Female') num_females
from t
group by job;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.