首页 > 试题广场 >

统计每种性别的人数

[编程题]统计每种性别的人数
  • 热度指数:264683 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果

示例:user_submit
device_id profile blog_url
2138 180cm,75kg,27,male http:/url/bigboy777
3214 165cm,45kg,26,female http:/url/kittycc
6543 178cm,65kg,25,male http:/url/tiger
4321 171cm,55kg,23,female http:/url/uhksd
2131 168cm,45kg,22,female http:/urlsydney

根据示例,你的查询应返回以下结果:
gender number
male 2
female 3

示例1

输入

drop table if exists user_submit;
CREATE TABLE `user_submit` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`profile` varchar(100) NOT NULL,
`blog_url` varchar(100) NOT NULL
);
INSERT INTO user_submit VALUES(1,2138,'180cm,75kg,27,male','http:/url/bisdgboy777');
INSERT INTO user_submit VALUES(1,3214,'165cm,45kg,26,female','http:/url/dkittycc');
INSERT INTO user_submit VALUES(1,6543,'178cm,65kg,25,male','http:/url/tigaer');
INSERT INTO user_submit VALUES(1,4321,'171cm,55kg,23,female','http:/url/uhsksd');
INSERT INTO user_submit VALUES(1,2131,'168cm,45kg,22,female','http:/url/sysdney');

输出

male|2
female|3
select gender, count(gender) as number
from
(
    select
        case
            when profile like '%,male' then 'male'
            when profile like '%,female' then 'female'
            else ''
        end as gender
    from
        user_submit
) u1
group by gender
发表于 2025-07-23 17:30:08 回复(0)
select
    case
        when profile regexp 'female$' then 'female'
        else 'male'
    end as gender,
    COUNT(*) as number
from
    user_submit
GROUP BY
    gender
发表于 2025-07-16 23:40:56 回复(0)
select 
substring(profile,15) as gender,
count(device_id) as number
from user_submit
group by gender

发表于 2025-07-16 16:39:38 回复(0)


select 
    substring_index(profile, ',', -1) as gender,
    count(*) as number
from user_submit
group by gender

发表于 2025-06-28 16:57:36 回复(0)
select
    case 
        when profile like '%female'
        then 'female'
        else 'male'
    end as gender,
    count(*) as number
from user_submit
group by gender
发表于 2025-06-14 16:04:57 回复(0)
select substr(profile,15) as gender,count(1) as number
      from user_submit
      group by substr(profile,15)
发表于 2025-06-13 15:34:49 回复(0)
select substring_index(profile,',',-1) as gender,count(*) as number
from user_submit
group by  gender
发表于 2025-05-27 16:44:37 回复(0)
select
    case
        when profile like '%female%' then 'female'
        else 'male'
    end as gender,
    count(profile) as number
from
    user_submit
group by
    gender;
发表于 2025-05-15 18:29:29 回复(0)
select substring(profile,15) as gender,
count(device_id) as number
from user_submit
group by gender
发表于 2025-05-07 21:33:11 回复(0)
法一:LOCATE函数
SELECT 
    IF(LOCATE(',male', profile) > 0, 'male', 'female') AS gender, 
    COUNT(*) AS number
FROM 
    user_submit 
GROUP BY 
    IF(LOCATE(',male', profile) > 0, 'male', 'female')
法二:SUBSTRING_INDEX函数
SELECT 
    SUBSTRING_INDEX(profile, ',', -1) AS gender, 
    COUNT(*) AS number
FROM 
    user_submit 
GROUP BY 
    SUBSTRING_INDEX(profile, ',', -1)



发表于 2025-04-08 18:12:31 回复(0)
SELECT
case
when profile LIKE "%,male" then "male"
when profile LIKE "%,female" then "female"
END gender,
count(*) NUMBER
FROM
user_submit
GROUP BY
gender
发表于 2025-03-06 13:17:31 回复(0)
有三种方法
方法一:substring_index()
select
    substring_index(profile,',', -1) gender,
    count(*) number 
from user_submit
group by gender
方法二:case when then end 与like结合
select case when profile like "%,male" then "male"  
            when profile like "%,female" then "female" end gender,
        count(*)number
from user_submit
group by gender
方法三:if与like结合
select if(profile like"%female","female","male") gender,
        count(*) number
from user_submit
group by gender

发表于 2025-03-04 11:07:29 回复(0)
#请问为什么我这样也能跑
select
    case
        when substring_index (profile, ',', -1) = 'male' then 'male'
        when substring_index (profile, ',', -1) = 'female' then 'female'
    end as gender,
    count(*) as number
from
    user_submit
group by
    gender
发表于 2025-02-27 14:48:30 回复(0)
我的笨蛋解法

SELECT
    (
        CASE
            WHEN profile LIKE '%,male' THEN 'male'
            WHEN profile LIKE '%,female' THEN 'female'
            ELSE NULL
        END
    ) AS gender,
    COUNT(
        (
            CASE
                WHEN profile LIKE '%,male' THEN 'male'
                WHEN profile LIKE '%,female' THEN 'female'
                ELSE NULL
            END
        )
    ) AS number
FROM
    user_submit
GROUP BY
    gender;


发表于 2025-02-26 11:05:20 回复(0)
select if(profile like ('%female'),'female','male') as f,count(profile) from user_submit group by f;
select substring_index(profile,',',-1) as s,count(device_id) from user_submit group by s
慢慢搞
发表于 2025-02-18 01:55:03 回复(0)
select
    (
    case
        when profile like '%female' then 'female'
        else 'male'
    end        
    ) gender,
   count(*) as number
from
    user_submit
group by
    gender
发表于 2025-02-16 13:37:17 回复(0)
脑子一热直接写
SELECT profile ->>'$[3]' AS gender
才发现没有大括号
发表于 2025-02-11 12:04:32 回复(0)
select
    (case
        when profile like '%female%' then 'female'
        else 'male'
    end
    )as gender,
    count(device_id) as number
from user_submit
group by gender
发表于 2025-01-19 23:35:28 回复(0)
select mid(profile,15) gender, count(*) number
from user_submit
group by gender
看没有人使用mid()函数,分享给大家
mid(
    profile: 列名
    start_index:字符的开始
    length:字符结束的index,若是到结束,可以不写
)
发表于 2025-01-15 21:39:49 回复(0)