繁体   English   中英

SQL - 在两列中对字符进行分组和计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM